viernes, 23 de marzo de 2018
Don't let select a paid invoice on another payment #3
/***
@author: José Francisco Rodríguez Chávez
@email: jfrodriguez.idempiere@gmail.com
@created: 20/03/2018 10:45 am
@lastupdated: 20/03/2018 10:45 am
@version: 1.0
@description: Don't let duplicated invoices on payment allocate
@name: beanshell:ValidarFacturaVariosPagos
***/
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.adempiere.webui.window.FDialog;
v_id_factura = A_PO.get_Value("C_Invoice_ID");
pcheck = (v_id_factura == null || v_id_factura == VOID);
if(!pcheck)
{
String sql = "SELECT * FROM adempiere.fnt_validar_factura_varios_pagos(" + v_id_factura + ");";
String sql2 = "SELECT * FROM adempiere.fnt_obtener_vpagos_factura(" + v_id_factura + ");";
rows = DB.getRowSet(sql.toString());
rows2 = DB.getRowSet(sql2.toString());
if(rows.next())
{
if(rows.getBoolean(1) == false)
{
if(rows2.next())
{
String pagos = rows2.getString(1);
return "La factura seleccionada ya esta en uso en el pago: " + pagos;
}
}
}
}
Don't let select a paid invoice on another payment #2
-- SET search_path TO adempiere;
-- SELECT * FROM fnt_obtener_vpagos_factura(1000000);
-- SELECT * FROM fnt_obtener_vpagos_factura(1109368);
-- SELECT * FROM fnt_obtener_vpagos_factura(1008186);
-- SELECT * FROM fnt_obtener_vpagos_factura(1074626);
-- DROP FUNCTION fnt_obtener_vpagos_factura(p_invoice_id NUMERIC(10,0));
CREATE OR REPLACE FUNCTION fnt_obtener_vpagos_factura(p_invoice_id NUMERIC(10,0))
RETURNS VARCHAR
AS $$
BEGIN
RETURN
(
WITH cte_factura_pagos AS
(
SELECT
p.c_payment_id AS id_pago,
p.documentno AS num_pago,
pa.c_paymentallocate_id AS id_abono,
pa.c_invoice_id AS id_factura,
pa.overunderamt AS monto_subpago
FROM c_payment p
JOIN c_paymentallocate pa
ON p.c_payment_id = pa.c_payment_id
WHERE p.ad_client_id = 1000000
AND p.docstatus IN ('CO', 'CL')
AND pa.c_invoice_id = p_invoice_id
)
SELECT COALESCE(
(
SELECT list_horizontal(fp.num_pago)::VARCHAR FROM cte_factura_pagos fp
WHERE
((
SELECT
COUNT(cp.id_factura) + 1
FROM cte_factura_pagos AS cp
) > 1
AND (
SELECT
fr.monto_subpago
FROM cte_factura_pagos fr
WHERE fr.id_abono =
(
SELECT
MAX(r.id_abono)
FROM cte_factura_pagos AS r
)
) = 0)
), '')
);
END;
$$ LANGUAGE plpgsql;
Don't let select a paid invoice on another payment #1
-- SET search_path TO adempiere;
-- SELECT * FROM fnt_validar_factura_varios_pagos(1000000);
-- SELECT * FROM fnt_validar_factura_varios_pagos(1109368);
-- SELECT * FROM fnt_validar_factura_varios_pagos(1008186);
-- SELECT * FROM fnt_validar_factura_varios_pagos(1074626);
CREATE OR REPLACE FUNCTION fnt_validar_factura_varios_pagos(p_invoice_id NUMERIC(10,0))
RETURNS BOOLEAN
AS $$
DECLARE
v_resultado INT = 0;
BEGIN
v_resultado =
(
WITH cte_factura_pagos AS
(
SELECT
p.c_payment_id AS id_pago,
pa.c_paymentallocate_id AS id_abono,
pa.c_invoice_id AS id_factura,
pa.overunderamt AS monto_subpago
FROM c_payment p
JOIN c_paymentallocate pa
ON p.c_payment_id = pa.c_payment_id
WHERE p.ad_client_id = 1000000
AND p.docstatus IN ('CO', 'CL')
AND pa.c_invoice_id = p_invoice_id
)
SELECT COALESCE(
(
SELECT DISTINCT 1 FROM cte_factura_pagos fp
WHERE
((
SELECT
COUNT(cp.id_factura) + 1
FROM cte_factura_pagos AS cp
) > 1
AND (
SELECT
fr.monto_subpago
FROM cte_factura_pagos fr
WHERE fr.id_abono =
(
SELECT
MAX(r.id_abono)
FROM cte_factura_pagos AS r
)
) = 0)
), 0)
);
IF(v_resultado = 1)THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END;
$$ LANGUAGE plpgsql;
miércoles, 21 de marzo de 2018
List Horizontal in iDempiere
/*********************************************************/
-- Function: coma_concat(text, text)
-- DROP FUNCTION coma_concat(text, text);
CREATE OR REPLACE FUNCTION coma_concat(
text,
text)
RETURNS text AS
$BODY$
SELECT
CASE
WHEN $2 IS NULL OR $2 = '' THEN '[' || $1 || ']'
WHEN $1 IS NULL OR $1 = '' THEN '[' || $2 || ']'
ELSE $1 || ';' || '[' || $2 || ']'
END
$BODY$
LANGUAGE sql VOLATILE
COST 100;
/*********************************************************/
-- Aggregate: list_horizontal(text)
-- DROP AGGREGATE list_horizontal(text);
CREATE AGGREGATE list_horizontal(text) (
SFUNC=coma_concat,
STYPE=text,
INITCOND=''
);
/*********************************************************/
EXAMPLE:
SELECT adempiere.list_horizontal(c."name") FROM adempiere.AD_Client AS c;
RESULT:
[GardenWorld];[System];[Company X]
Suscribirse a:
Comentarios (Atom)