You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
4.8 KiB

--[[
Ingresa los datos de la operacion en la pagina de AFIP, es la parte de la tabla donde se agregan los items, monto unitario y descripcion.
Recibe un JSON con los datos de la operacion, por ejemplo:
{
"uid": "53935f27-5cf0-4281-9a29-a68f100ee981",
"execution_status": "Borrador",
"tipo_comprobante": "factura c",
"fecha_comprobante": "13/11/2025",
"tipo_concepto": "servicios",
"servicio_fecha_desde": "01/10/2025",
"servicio_fecha_hasta": "01/10/2025",
"servicio_fecha_vencimiento_pago": "13/11/2025",
"referencia": "",
"tipo_iva_receptor": "consumidor final",
"cuit_receptor": "",
"forma_pago": "contado",
"monto_unitario": "10000",
"cantidad": "1",
"descripcion": "Clase de apoyo"
}
--]]
----------------------------------------------------------------------
-- Helpers
----------------------------------------------------------------------
local function logErrorAndExit(message)
log(message)
error(message)
end
local function is_factura(tipo_comprobante)
return string.match(tipo_comprobante, "factura")
end
local function is_recibo(tipo_comprobante)
return string.match(tipo_comprobante, "recibo")
end
local function input_recibo_data(descripcion, monto_unitario, tipo_comprobante)
--[[
<textarea class="soloTexto" name="detalleDescripcion" id="detalle_descripcion" maxlength="400" style="width:500px;" rows="6" onkeypress="return limitarLongitudTextArea(event,this,400);" onkeyup="recortar(this,400);" onblur="recortar(this,400);"></textarea>
--]]
log("afip_ingresar_datos_operacion.input_recibo_data Descripcion: " .. descripcion .. " Monto: " .. monto_unitario .. " Tipo: " .. tipo_comprobante)
descripcion_selector = "#detalle_descripcion"
err = setTextFieldByQuerySelector(descripcion_selector, descripcion)
if err then
message = "Error setting detalle_descripcion: " .. err
logErrorAndExit(message)
end
--[[
<input type="text" class="soloNumerosConDecimales" name="detallePrecio" maxlength="16" id="detalle_precio" onkeyup="calcularSubtotalDetalle();">
--]]
precio_selector = "#detalle_precio"
err = setTextFieldByQuerySelector(precio_selector, monto_unitario)
if err then
message = "Error setting detalle_precio: " .. err
logErrorAndExit(message)
end
end
local function input_factura_data(descripcion, monto_unitario, tipo_comprobante)
log("afip_ingresar_datos_operacion.input_factura_data Descripcion: " .. descripcion .. " Monto: " .. monto_unitario .. " Tipo: " .. tipo_comprobante)
-- TODO: Properly handle recibo which has different fields!
-- Descripcion : <textarea class="soloTexto" name="detalleDescripcion" id="detalle_descripcion" maxlength="400" style="width:500px;" rows="6" onkeypress="return limitarLongitudTextArea(event,this,400);" onkeyup="recortar(this,400);" onblur="recortar(this,400);"></textarea>
-- Monto:
descripcion_selector = "#detalle_descripcion1"
precio_selector = "#detalle_precio1"
err = waitVisibleByQuerySelector(descripcion_selector)
if err then
message = "Error waiting for detalle_descripcion1: " .. err
log(message)
error(message)
end
err = setTextFieldByQuerySelector(descripcion_selector, descripcion)
if err then
message = "Error setting detalle_descripcion1: " .. err
log(message)
error(message)
end
waitSecs(1)
err = waitVisibleByQuerySelector(precio_selector)
if err then
message = "Error waiting for detalle_precio1: " .. err
log(message)
error(message)
end
err = setTextFieldByQuerySelector(precio_selector, monto_unitario)
if err then
message = "Error setting detalle_precio1: " .. err
log(message)
error(message)
end
waitSecs(1)
end
----------------------------------------------------------------------
-- Main logic
----------------------------------------------------------------------
local function main()
log("Inicio afip_ingresar_datos_operacion from LUA!!")
local err
local json = require("json")
-- Parse the JSON string
local obj, err = json.decode(json_payload)
if err then
message = "Error parsing JSON: " .. err
log(message)
error(message)
end
local error_on_page
descripcion = obj["descripcion"]
monto_unitario = obj["monto_unitario"]
tipo_comprobante = obj["tipo_comprobante"]
if is_factura(tipo_comprobante) then
input_factura_data(descripcion, monto_unitario, tipo_comprobante)
elseif is_recibo(tipo_comprobante) then
input_recibo_data(descripcion, monto_unitario, tipo_comprobante)
else
message = "Tipo de comprobante no soportado en afip_ingresar_datos_operacion: " .. tostring(tipo_comprobante)
logErrorAndExit(message)
end
log("Finishing afip_ingresar_datos_operacion")
end
local ok, err = pcall(main)
if not ok then
-- Let Go see this as a Lua error so it can fall back to legacy datosDeEmision
logErrorAndExit("afip_ingresar_datos_operacion failed: " .. tostring(err))
end