hg merge release-2.1 (merge release2.1 into development)
This commit is contained in:
commit
1ba9e2935c
|
@ -39,13 +39,13 @@ SELECT il.ad_client_id,
|
||||||
il.priceentered,
|
il.priceentered,
|
||||||
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
||||||
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
||||||
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced END AS marginamt,
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt,
|
||||||
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
||||||
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
||||||
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
||||||
AS linelimitamt,
|
AS linelimitamt,
|
||||||
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced - il.linenetamt,i.C_Currency_ID,'N') AS linediscountamt,
|
currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt,
|
||||||
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * il.linenetamt - il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS
|
||||||
lineoverlimitamt,
|
lineoverlimitamt,
|
||||||
il.ad_orgtrx_id,
|
il.ad_orgtrx_id,
|
||||||
il.a_processed,
|
il.a_processed,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
CREATE OR REPLACE VIEW rv_c_invoiceline AS
|
CREATE OR REPLACE VIEW rv_c_invoiceline AS
|
||||||
SELECT il.ad_client_id,
|
SELECT il.ad_client_id,
|
||||||
il.ad_org_id,
|
il.ad_org_id,
|
||||||
il.isactive,
|
il.isactive,
|
||||||
|
@ -39,13 +39,13 @@ SELECT il.ad_client_id,
|
||||||
il.priceentered,
|
il.priceentered,
|
||||||
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
||||||
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
||||||
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced END AS marginamt,
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt,
|
||||||
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
||||||
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
||||||
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
||||||
AS linelimitamt,
|
AS linelimitamt,
|
||||||
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced - il.linenetamt,i.C_Currency_ID,'N') AS linediscountamt,
|
currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt,
|
||||||
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * il.linenetamt - il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END AS
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS
|
||||||
lineoverlimitamt,
|
lineoverlimitamt,
|
||||||
il.ad_orgtrx_id,
|
il.ad_orgtrx_id,
|
||||||
il.a_processed,
|
il.a_processed,
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
SET SQLBLANKLINES ON
|
||||||
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
-- IDEMPIERE-2540 unique index on price break
|
||||||
|
-- May 27, 2015 12:33:21 PM COT
|
||||||
|
INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201036,'ab4b4d97-9364-451d-9c1d-dbaf2585ff5c',TO_DATE('2015-05-27 12:33:21','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','m_productpricevendorbreak_unq',TO_DATE('2015-05-27 12:33:21','YYYY-MM-DD HH24:MI:SS'),100,53172,'N','Y','N','N','N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:35:21 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201265,'72bb9352-bf69-4ecf-b170-d6107de2fabb',TO_DATE('2015-05-27 12:35:21','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_DATE('2015-05-27 12:35:21','YYYY-MM-DD HH24:MI:SS'),100,56922,201036,10)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:35:42 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_TableIndex_ID,ColumnSQL,SeqNo) VALUES (0,0,201266,'e96ed24c-ed98-4aa2-89a2-47e5779043a7',TO_DATE('2015-05-27 12:35:41','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_DATE('2015-05-27 12:35:41','YYYY-MM-DD HH24:MI:SS'),100,201036,'COALESCE(C_BPartner_ID,-1)',20)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:09 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201267,'12feebe5-ace2-4a3a-8f3a-0a6228157967',TO_DATE('2015-05-27 12:36:08','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_DATE('2015-05-27 12:36:08','YYYY-MM-DD HH24:MI:SS'),100,56921,201036,30)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:18 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201268,'7ce72777-6a11-4734-bda5-9c1fc2156a13',TO_DATE('2015-05-27 12:36:18','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_DATE('2015-05-27 12:36:18','YYYY-MM-DD HH24:MI:SS'),100,56929,201036,40)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:45 PM COT
|
||||||
|
CREATE UNIQUE INDEX m_productpricevendorbreak_unq ON M_ProductPriceVendorBreak (M_Product_ID,COALESCE(C_BPartner_ID,-1),M_PriceList_Version_ID,BreakValue)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201505271238_IDEMPIERE-2540_unqidx.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
CREATE OR REPLACE VIEW rv_c_invoiceline AS
|
||||||
|
SELECT il.ad_client_id,
|
||||||
|
il.ad_org_id,
|
||||||
|
il.isactive,
|
||||||
|
il.created,
|
||||||
|
il.createdby,
|
||||||
|
il.updated,
|
||||||
|
il.updatedby,
|
||||||
|
il.c_invoiceline_id,
|
||||||
|
i.c_invoice_id,
|
||||||
|
i.salesrep_id,
|
||||||
|
i.c_bpartner_id,
|
||||||
|
i.c_bp_group_id,
|
||||||
|
il.m_product_id,
|
||||||
|
p.m_product_category_id,
|
||||||
|
i.dateinvoiced,
|
||||||
|
i.dateacct,
|
||||||
|
i.issotrx,
|
||||||
|
i.c_doctype_id,
|
||||||
|
i.docstatus,
|
||||||
|
i.ispaid,
|
||||||
|
il.c_campaign_id,
|
||||||
|
il.c_project_id,
|
||||||
|
il.c_activity_id,
|
||||||
|
il.c_projectphase_id,
|
||||||
|
il.c_projecttask_id,
|
||||||
|
il.qtyinvoiced * i.multiplier AS qtyinvoiced,
|
||||||
|
il.qtyentered * i.multiplier AS qtyentered,
|
||||||
|
il.m_attributesetinstance_id,
|
||||||
|
productattribute(il.m_attributesetinstance_id) AS productattribute,
|
||||||
|
pasi.m_attributeset_id,
|
||||||
|
pasi.m_lot_id,
|
||||||
|
pasi.guaranteedate,
|
||||||
|
pasi.lot,
|
||||||
|
pasi.serno,
|
||||||
|
il.pricelist,
|
||||||
|
il.priceactual,
|
||||||
|
il.pricelimit,
|
||||||
|
il.priceentered,
|
||||||
|
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
||||||
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
||||||
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt,
|
||||||
|
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
||||||
|
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
||||||
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
||||||
|
AS linelimitamt,
|
||||||
|
currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt,
|
||||||
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS
|
||||||
|
lineoverlimitamt,
|
||||||
|
il.ad_orgtrx_id,
|
||||||
|
il.a_processed,
|
||||||
|
il.c_charge_id,
|
||||||
|
il.c_orderline_id,
|
||||||
|
il.c_tax_id,
|
||||||
|
il.c_uom_id AS c_invoiceline_c_uom_id,
|
||||||
|
il.description AS c_invoiceline_description,
|
||||||
|
il.isdescription,
|
||||||
|
il.isprinted,
|
||||||
|
il.line,
|
||||||
|
il.linenetamt AS c_invoiceline_linenetamt,
|
||||||
|
il.linetotalamt,
|
||||||
|
il.m_inoutline_id,
|
||||||
|
il.m_rmaline_id,
|
||||||
|
il.processed,
|
||||||
|
il.ref_invoiceline_id,
|
||||||
|
il.rramt,
|
||||||
|
il.rrstartdate,
|
||||||
|
il.s_resourceassignment_id,
|
||||||
|
il.taxamt,
|
||||||
|
il.user1_id,
|
||||||
|
il.user2_id,
|
||||||
|
p.ad_org_id AS m_product_ad_org_id,
|
||||||
|
p.classification,
|
||||||
|
p.copyfrom AS m_product_copyfrom,
|
||||||
|
p.created AS m_product_created,
|
||||||
|
p.createdby AS m_product_createdby,
|
||||||
|
p.c_revenuerecognition_id,
|
||||||
|
p.c_subscriptiontype_id,
|
||||||
|
p.c_taxcategory_id,
|
||||||
|
p.c_uom_id AS m_productline_c_uom_id,
|
||||||
|
p.description AS m_product_description,
|
||||||
|
p.descriptionurl,
|
||||||
|
p.discontinued,
|
||||||
|
p.discontinuedat,
|
||||||
|
p.documentnote,
|
||||||
|
p.group1,
|
||||||
|
p.group2,
|
||||||
|
p.guaranteedays,
|
||||||
|
p.guaranteedaysmin,
|
||||||
|
p.help,
|
||||||
|
p.imageurl,
|
||||||
|
p.isactive AS m_product_isactive,
|
||||||
|
p.isdropship,
|
||||||
|
p.isexcludeautodelivery,
|
||||||
|
p.isinvoiceprintdetails,
|
||||||
|
p.ispicklistprintdetails,
|
||||||
|
p.ispurchased,
|
||||||
|
p.isselfservice,
|
||||||
|
p.issold,
|
||||||
|
p.isstocked,
|
||||||
|
p.issummary AS m_product_issummary,
|
||||||
|
p.isverified,
|
||||||
|
p.iswebstorefeatured,
|
||||||
|
p.lowlevel,
|
||||||
|
p.m_attributeset_id AS m_product_m_attributeset_id,
|
||||||
|
p.m_freightcategory_id,
|
||||||
|
p.m_locator_id,
|
||||||
|
p.m_product_id AS m_product_m_product_id,
|
||||||
|
p.processing AS m_product_processing,
|
||||||
|
p.producttype,
|
||||||
|
p.r_mailtext_id,
|
||||||
|
p.salesrep_id AS m_product_salesrep_id,
|
||||||
|
p.s_expensetype_id,
|
||||||
|
p.shelfdepth,
|
||||||
|
p.shelfheight,
|
||||||
|
p.shelfwidth,
|
||||||
|
p.sku,
|
||||||
|
p.s_resource_id,
|
||||||
|
p.unitsperpack,
|
||||||
|
p.unitsperpallet,
|
||||||
|
p.updated AS m_product_updated,
|
||||||
|
p.updatedby AS m_product_updatedby,
|
||||||
|
p.versionno,
|
||||||
|
p.volume,
|
||||||
|
p.weight,
|
||||||
|
pasi.ad_org_id AS m_asi_ad_org_id,
|
||||||
|
pasi.created AS m_attributesetinstance_created,
|
||||||
|
pasi.createdby AS m_asi_createdby,
|
||||||
|
pasi.description AS m_asi_description,
|
||||||
|
pasi.isactive AS m_attributesetinstance_isacti,
|
||||||
|
pasi.serno AS m_attributesetinstance_serno,
|
||||||
|
pasi.updated AS m_attributesetinstance_updated,
|
||||||
|
pasi.updatedby AS m_asi_updatedby
|
||||||
|
FROM rv_c_invoice i
|
||||||
|
JOIN c_invoiceline il
|
||||||
|
ON i.c_invoice_id = il.c_invoice_id
|
||||||
|
LEFT JOIN m_product p
|
||||||
|
ON il.m_product_id = p.m_product_id
|
||||||
|
LEFT JOIN m_attributesetinstance pasi
|
||||||
|
ON il.m_attributesetinstance_id = pasi.m_attributesetinstance_id
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201505271631_IDEMPIERE-2550.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
-- IDEMPIERE-2540 unique index on price break
|
||||||
|
-- May 27, 2015 12:33:21 PM COT
|
||||||
|
INSERT INTO AD_TableIndex (AD_Client_ID,AD_Org_ID,AD_TableIndex_ID,AD_TableIndex_UU,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,AD_Table_ID,IsCreateConstraint,IsUnique,Processing,TableIndexDrop,IsKey) VALUES (0,0,201036,'ab4b4d97-9364-451d-9c1d-dbaf2585ff5c',TO_TIMESTAMP('2015-05-27 12:33:21','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','m_productpricevendorbreak_unq',TO_TIMESTAMP('2015-05-27 12:33:21','YYYY-MM-DD HH24:MI:SS'),100,53172,'N','Y','N','N','N')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:35:21 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201265,'72bb9352-bf69-4ecf-b170-d6107de2fabb',TO_TIMESTAMP('2015-05-27 12:35:21','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2015-05-27 12:35:21','YYYY-MM-DD HH24:MI:SS'),100,56922,201036,10)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:35:42 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_TableIndex_ID,ColumnSQL,SeqNo) VALUES (0,0,201266,'e96ed24c-ed98-4aa2-89a2-47e5779043a7',TO_TIMESTAMP('2015-05-27 12:35:41','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2015-05-27 12:35:41','YYYY-MM-DD HH24:MI:SS'),100,201036,'COALESCE(C_BPartner_ID,-1)',20)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:09 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201267,'12feebe5-ace2-4a3a-8f3a-0a6228157967',TO_TIMESTAMP('2015-05-27 12:36:08','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2015-05-27 12:36:08','YYYY-MM-DD HH24:MI:SS'),100,56921,201036,30)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:18 PM COT
|
||||||
|
INSERT INTO AD_IndexColumn (AD_Client_ID,AD_Org_ID,AD_IndexColumn_ID,AD_IndexColumn_UU,Created,CreatedBy,EntityType,IsActive,Updated,UpdatedBy,AD_Column_ID,AD_TableIndex_ID,SeqNo) VALUES (0,0,201268,'7ce72777-6a11-4734-bda5-9c1fc2156a13',TO_TIMESTAMP('2015-05-27 12:36:18','YYYY-MM-DD HH24:MI:SS'),100,'D','Y',TO_TIMESTAMP('2015-05-27 12:36:18','YYYY-MM-DD HH24:MI:SS'),100,56929,201036,40)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- May 27, 2015 12:36:45 PM COT
|
||||||
|
CREATE UNIQUE INDEX m_productpricevendorbreak_unq ON M_ProductPriceVendorBreak (M_Product_ID,COALESCE(C_BPartner_ID,-1),M_PriceList_Version_ID,BreakValue)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201505271238_IDEMPIERE-2540_unqidx.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,145 @@
|
||||||
|
CREATE OR REPLACE VIEW rv_c_invoiceline AS
|
||||||
|
SELECT il.ad_client_id,
|
||||||
|
il.ad_org_id,
|
||||||
|
il.isactive,
|
||||||
|
il.created,
|
||||||
|
il.createdby,
|
||||||
|
il.updated,
|
||||||
|
il.updatedby,
|
||||||
|
il.c_invoiceline_id,
|
||||||
|
i.c_invoice_id,
|
||||||
|
i.salesrep_id,
|
||||||
|
i.c_bpartner_id,
|
||||||
|
i.c_bp_group_id,
|
||||||
|
il.m_product_id,
|
||||||
|
p.m_product_category_id,
|
||||||
|
i.dateinvoiced,
|
||||||
|
i.dateacct,
|
||||||
|
i.issotrx,
|
||||||
|
i.c_doctype_id,
|
||||||
|
i.docstatus,
|
||||||
|
i.ispaid,
|
||||||
|
il.c_campaign_id,
|
||||||
|
il.c_project_id,
|
||||||
|
il.c_activity_id,
|
||||||
|
il.c_projectphase_id,
|
||||||
|
il.c_projecttask_id,
|
||||||
|
il.qtyinvoiced * i.multiplier AS qtyinvoiced,
|
||||||
|
il.qtyentered * i.multiplier AS qtyentered,
|
||||||
|
il.m_attributesetinstance_id,
|
||||||
|
productattribute(il.m_attributesetinstance_id) AS productattribute,
|
||||||
|
pasi.m_attributeset_id,
|
||||||
|
pasi.m_lot_id,
|
||||||
|
pasi.guaranteedate,
|
||||||
|
pasi.lot,
|
||||||
|
pasi.serno,
|
||||||
|
il.pricelist,
|
||||||
|
il.priceactual,
|
||||||
|
il.pricelimit,
|
||||||
|
il.priceentered,
|
||||||
|
CASE WHEN il.pricelist = 0 THEN 0 ELSE currencyRound((il.pricelist - il.priceactual) / il.pricelist * 100,i.C_Currency_ID,'N') END AS discount,
|
||||||
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE currencyRound((il.priceactual - il.pricelimit) / il.pricelimit * 100,i.C_Currency_ID,'N') END AS margin,
|
||||||
|
CASE WHEN il.pricelimit = 0 THEN 0 ELSE (il.priceactual - il.pricelimit) * il.qtyinvoiced * i.multiplier END AS marginamt,
|
||||||
|
currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') AS linenetamt,
|
||||||
|
currencyRound(i.multiplier * il.pricelist * il.qtyinvoiced,i.C_Currency_ID,'N') AS linelistamt,
|
||||||
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN currencyRound(i.multiplier * il.linenetamt,i.C_Currency_ID,'N') ELSE currencyRound(i.multiplier * il.pricelimit * il.qtyinvoiced,i.C_Currency_ID,'N') END
|
||||||
|
AS linelimitamt,
|
||||||
|
currencyRound(i.multiplier * (il.pricelist * il.qtyinvoiced - il.linenetamt),i.C_Currency_ID,'N') AS linediscountamt,
|
||||||
|
CASE WHEN COALESCE(il.pricelimit, 0) = 0 THEN 0 ELSE currencyRound(i.multiplier * (il.linenetamt - il.pricelimit * il.qtyinvoiced),i.C_Currency_ID,'N') END AS
|
||||||
|
lineoverlimitamt,
|
||||||
|
il.ad_orgtrx_id,
|
||||||
|
il.a_processed,
|
||||||
|
il.c_charge_id,
|
||||||
|
il.c_orderline_id,
|
||||||
|
il.c_tax_id,
|
||||||
|
il.c_uom_id AS c_invoiceline_c_uom_id,
|
||||||
|
il.description AS c_invoiceline_description,
|
||||||
|
il.isdescription,
|
||||||
|
il.isprinted,
|
||||||
|
il.line,
|
||||||
|
il.linenetamt AS c_invoiceline_linenetamt,
|
||||||
|
il.linetotalamt,
|
||||||
|
il.m_inoutline_id,
|
||||||
|
il.m_rmaline_id,
|
||||||
|
il.processed,
|
||||||
|
il.ref_invoiceline_id,
|
||||||
|
il.rramt,
|
||||||
|
il.rrstartdate,
|
||||||
|
il.s_resourceassignment_id,
|
||||||
|
il.taxamt,
|
||||||
|
il.user1_id,
|
||||||
|
il.user2_id,
|
||||||
|
p.ad_org_id AS m_product_ad_org_id,
|
||||||
|
p.classification,
|
||||||
|
p.copyfrom AS m_product_copyfrom,
|
||||||
|
p.created AS m_product_created,
|
||||||
|
p.createdby AS m_product_createdby,
|
||||||
|
p.c_revenuerecognition_id,
|
||||||
|
p.c_subscriptiontype_id,
|
||||||
|
p.c_taxcategory_id,
|
||||||
|
p.c_uom_id AS m_productline_c_uom_id,
|
||||||
|
p.description AS m_product_description,
|
||||||
|
p.descriptionurl,
|
||||||
|
p.discontinued,
|
||||||
|
p.discontinuedat,
|
||||||
|
p.documentnote,
|
||||||
|
p.group1,
|
||||||
|
p.group2,
|
||||||
|
p.guaranteedays,
|
||||||
|
p.guaranteedaysmin,
|
||||||
|
p.help,
|
||||||
|
p.imageurl,
|
||||||
|
p.isactive AS m_product_isactive,
|
||||||
|
p.isdropship,
|
||||||
|
p.isexcludeautodelivery,
|
||||||
|
p.isinvoiceprintdetails,
|
||||||
|
p.ispicklistprintdetails,
|
||||||
|
p.ispurchased,
|
||||||
|
p.isselfservice,
|
||||||
|
p.issold,
|
||||||
|
p.isstocked,
|
||||||
|
p.issummary AS m_product_issummary,
|
||||||
|
p.isverified,
|
||||||
|
p.iswebstorefeatured,
|
||||||
|
p.lowlevel,
|
||||||
|
p.m_attributeset_id AS m_product_m_attributeset_id,
|
||||||
|
p.m_freightcategory_id,
|
||||||
|
p.m_locator_id,
|
||||||
|
p.m_product_id AS m_product_m_product_id,
|
||||||
|
p.processing AS m_product_processing,
|
||||||
|
p.producttype,
|
||||||
|
p.r_mailtext_id,
|
||||||
|
p.salesrep_id AS m_product_salesrep_id,
|
||||||
|
p.s_expensetype_id,
|
||||||
|
p.shelfdepth,
|
||||||
|
p.shelfheight,
|
||||||
|
p.shelfwidth,
|
||||||
|
p.sku,
|
||||||
|
p.s_resource_id,
|
||||||
|
p.unitsperpack,
|
||||||
|
p.unitsperpallet,
|
||||||
|
p.updated AS m_product_updated,
|
||||||
|
p.updatedby AS m_product_updatedby,
|
||||||
|
p.versionno,
|
||||||
|
p.volume,
|
||||||
|
p.weight,
|
||||||
|
pasi.ad_org_id AS m_asi_ad_org_id,
|
||||||
|
pasi.created AS m_attributesetinstance_created,
|
||||||
|
pasi.createdby AS m_asi_createdby,
|
||||||
|
pasi.description AS m_asi_description,
|
||||||
|
pasi.isactive AS m_attributesetinstance_isacti,
|
||||||
|
pasi.serno AS m_attributesetinstance_serno,
|
||||||
|
pasi.updated AS m_attributesetinstance_updated,
|
||||||
|
pasi.updatedby AS m_asi_updatedby
|
||||||
|
FROM rv_c_invoice i
|
||||||
|
JOIN c_invoiceline il
|
||||||
|
ON i.c_invoice_id = il.c_invoice_id
|
||||||
|
LEFT JOIN m_product p
|
||||||
|
ON il.m_product_id = p.m_product_id
|
||||||
|
LEFT JOIN m_attributesetinstance pasi
|
||||||
|
ON il.m_attributesetinstance_id = pasi.m_attributesetinstance_id
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201505271631_IDEMPIERE-2550.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -1853,7 +1853,7 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
String MMPolicy = product.getMMPolicy();
|
String MMPolicy = product.getMMPolicy();
|
||||||
Timestamp minGuaranteeDate = getMovementDate();
|
Timestamp minGuaranteeDate = getMovementDate();
|
||||||
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
|
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
|
||||||
minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), true);
|
minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), false);
|
||||||
BigDecimal qtyToDeliver = qty;
|
BigDecimal qtyToDeliver = qty;
|
||||||
for (MStorageOnHand storage: storages)
|
for (MStorageOnHand storage: storages)
|
||||||
{
|
{
|
||||||
|
@ -1897,7 +1897,7 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
|
|
||||||
private BigDecimal autoBalanceNegative(MInOutLine line, MProduct product,BigDecimal qtyToReceive) {
|
private BigDecimal autoBalanceNegative(MInOutLine line, MProduct product,BigDecimal qtyToReceive) {
|
||||||
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
||||||
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), true);
|
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), false);
|
||||||
|
|
||||||
Timestamp dateMPolicy = null;
|
Timestamp dateMPolicy = null;
|
||||||
|
|
||||||
|
|
|
@ -625,7 +625,7 @@ public class MInventory extends X_M_Inventory implements DocAction
|
||||||
{
|
{
|
||||||
//auto balance negative on hand
|
//auto balance negative on hand
|
||||||
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
MStorageOnHand[] storages = MStorageOnHand.getWarehouseNegative(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
||||||
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), true);
|
null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), line.getM_Locator_ID(), get_TrxName(), false);
|
||||||
for (MStorageOnHand storage : storages)
|
for (MStorageOnHand storage : storages)
|
||||||
{
|
{
|
||||||
if (storage.getQtyOnHand().signum() < 0)
|
if (storage.getQtyOnHand().signum() < 0)
|
||||||
|
@ -656,7 +656,7 @@ public class MInventory extends X_M_Inventory implements DocAction
|
||||||
{
|
{
|
||||||
String MMPolicy = product.getMMPolicy();
|
String MMPolicy = product.getMMPolicy();
|
||||||
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
|
||||||
null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), true);
|
null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName(), false);
|
||||||
|
|
||||||
BigDecimal qtyToDeliver = qtyDiff.negate();
|
BigDecimal qtyToDeliver = qtyDiff.negate();
|
||||||
for (MStorageOnHand storage: storages)
|
for (MStorageOnHand storage: storages)
|
||||||
|
|
|
@ -113,7 +113,7 @@ public class MPriceListVersion extends X_M_PriceList_Version
|
||||||
*/
|
*/
|
||||||
public MProductPrice[] getProductPrice (String whereClause)
|
public MProductPrice[] getProductPrice (String whereClause)
|
||||||
{
|
{
|
||||||
String localWhereClause = I_M_ProductPrice.COLUMNNAME_M_PriceList_Version_ID+"=?"+whereClause;
|
String localWhereClause = I_M_ProductPrice.COLUMNNAME_M_PriceList_Version_ID+"=?";
|
||||||
if (whereClause != null)
|
if (whereClause != null)
|
||||||
localWhereClause += " " + whereClause;
|
localWhereClause += " " + whereClause;
|
||||||
List<MProductPrice> list = new Query(getCtx(),I_M_ProductPrice.Table_Name,localWhereClause,get_TrxName())
|
List<MProductPrice> list = new Query(getCtx(),I_M_ProductPrice.Table_Name,localWhereClause,get_TrxName())
|
||||||
|
|
|
@ -132,7 +132,7 @@ public class MProductionLine extends X_M_ProductionLine {
|
||||||
|
|
||||||
// create transactions and update stock used in production
|
// create transactions and update stock used in production
|
||||||
MStorageOnHand[] storages = MStorageOnHand.getAll( getCtx(), getM_Product_ID(),
|
MStorageOnHand[] storages = MStorageOnHand.getAll( getCtx(), getM_Product_ID(),
|
||||||
getM_Locator_ID(), get_TrxName(), true, 120);
|
getM_Locator_ID(), get_TrxName(), false, 0);
|
||||||
|
|
||||||
MProductionLineMA lineMA = null;
|
MProductionLineMA lineMA = null;
|
||||||
MTransaction matTrx = null;
|
MTransaction matTrx = null;
|
||||||
|
@ -181,6 +181,7 @@ public class MProductionLine extends X_M_ProductionLine {
|
||||||
} else {
|
} else {
|
||||||
if (log.isLoggable(Level.FINE))log.log(Level.FINE, "Saved transaction for " + toString());
|
if (log.isLoggable(Level.FINE))log.log(Level.FINE, "Saved transaction for " + toString());
|
||||||
}
|
}
|
||||||
|
DB.getDatabase().forUpdate(storages[sl], 120);
|
||||||
storages[sl].changeQtyOnHand(lineQty, false);
|
storages[sl].changeQtyOnHand(lineQty, false);
|
||||||
if ( !storages[sl].save(get_TrxName()) ) {
|
if ( !storages[sl].save(get_TrxName()) ) {
|
||||||
log.log(Level.SEVERE, "Could not update storage for " + toString());
|
log.log(Level.SEVERE, "Could not update storage for " + toString());
|
||||||
|
|
|
@ -581,7 +581,7 @@ public final class Env
|
||||||
if (TAB_INFO == TabNo)
|
if (TAB_INFO == TabNo)
|
||||||
return s != null ? s : "";
|
return s != null ? s : "";
|
||||||
//
|
//
|
||||||
if (s == null)
|
if (Util.isEmpty(s))
|
||||||
return getContext(ctx, WindowNo, context, false);
|
return getContext(ctx, WindowNo, context, false);
|
||||||
return s;
|
return s;
|
||||||
} // getContext
|
} // getContext
|
||||||
|
@ -623,7 +623,7 @@ public final class Env
|
||||||
if (TAB_INFO == TabNo)
|
if (TAB_INFO == TabNo)
|
||||||
return s != null ? s : "";
|
return s != null ? s : "";
|
||||||
//
|
//
|
||||||
if (s == null && ! onlyTab)
|
if (Util.isEmpty(s) && ! onlyTab)
|
||||||
return getContext(ctx, WindowNo, context, onlyWindow);
|
return getContext(ctx, WindowNo, context, onlyWindow);
|
||||||
return s;
|
return s;
|
||||||
} // getContext
|
} // getContext
|
||||||
|
@ -715,7 +715,7 @@ public final class Env
|
||||||
public static int getContextAsInt (Properties ctx, int WindowNo, int TabNo, String context)
|
public static int getContextAsInt (Properties ctx, int WindowNo, int TabNo, String context)
|
||||||
{
|
{
|
||||||
String s = getContext(ctx, WindowNo, TabNo, context);
|
String s = getContext(ctx, WindowNo, TabNo, context);
|
||||||
if (s.length() == 0)
|
if (Util.isEmpty(s))
|
||||||
return 0;
|
return 0;
|
||||||
//
|
//
|
||||||
try
|
try
|
||||||
|
|
|
@ -57,9 +57,11 @@ import org.zkoss.zk.au.out.AuEcho;
|
||||||
import org.zkoss.zk.au.out.AuScript;
|
import org.zkoss.zk.au.out.AuScript;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.HtmlBasedComponent;
|
import org.zkoss.zk.ui.HtmlBasedComponent;
|
||||||
|
import org.zkoss.zk.ui.Page;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zk.ui.event.KeyEvent;
|
||||||
import org.zkoss.zk.ui.util.Clients;
|
import org.zkoss.zk.ui.util.Clients;
|
||||||
import org.zkoss.zul.A;
|
import org.zkoss.zul.A;
|
||||||
import org.zkoss.zul.Div;
|
import org.zkoss.zul.Div;
|
||||||
|
@ -85,11 +87,10 @@ import com.lowagie.text.pdf.PdfWriter;
|
||||||
*/
|
*/
|
||||||
public class ProcessDialog extends AbstractProcessDialog implements EventListener<Event>, IHelpContext
|
public class ProcessDialog extends AbstractProcessDialog implements EventListener<Event>, IHelpContext
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 5958768001208626552L;
|
private static final long serialVersionUID = -6728929130788829223L;
|
||||||
|
|
||||||
public static final String ON_INITIAL_FOCUS_EVENT = "onInitialFocus";
|
public static final String ON_INITIAL_FOCUS_EVENT = "onInitialFocus";
|
||||||
|
|
||||||
|
@ -106,6 +107,11 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene
|
||||||
private HtmlBasedComponent messageResultContent;
|
private HtmlBasedComponent messageResultContent;
|
||||||
private HtmlBasedComponent infoResultContent;
|
private HtmlBasedComponent infoResultContent;
|
||||||
|
|
||||||
|
/** Window No */
|
||||||
|
private int m_WindowNo = -1;
|
||||||
|
private long prevKeyEventTime = 0;
|
||||||
|
private KeyEvent prevKeyEvent;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialog to start a process/report
|
* Dialog to start a process/report
|
||||||
* @param ctx
|
* @param ctx
|
||||||
|
@ -121,13 +127,12 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene
|
||||||
public ProcessDialog (int AD_Process_ID, boolean isSOTrx)
|
public ProcessDialog (int AD_Process_ID, boolean isSOTrx)
|
||||||
{
|
{
|
||||||
log.info("Process=" + AD_Process_ID );
|
log.info("Process=" + AD_Process_ID );
|
||||||
int WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
m_WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
||||||
this.setAttribute(IDesktop.WINDOWNO_ATTRIBUTE, WindowNo);
|
this.setAttribute(IDesktop.WINDOWNO_ATTRIBUTE, m_WindowNo);
|
||||||
Env.setContext(Env.getCtx(), WindowNo, "IsSOTrx", isSOTrx ? "Y" : "N");
|
Env.setContext(Env.getCtx(), m_WindowNo, "IsSOTrx", isSOTrx ? "Y" : "N");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
init(Env.getCtx(), WindowNo, AD_Process_ID, null, false, false);
|
init(Env.getCtx(), m_WindowNo, AD_Process_ID, null, false, false);
|
||||||
querySaved();
|
querySaved();
|
||||||
addEventListener(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT, this);
|
addEventListener(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT, this);
|
||||||
addEventListener(ON_INITIAL_FOCUS_EVENT, this);
|
addEventListener(ON_INITIAL_FOCUS_EVENT, this);
|
||||||
|
@ -138,6 +143,22 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene
|
||||||
}
|
}
|
||||||
} // ProcessDialog
|
} // ProcessDialog
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageAttached(Page newpage, Page oldpage) {
|
||||||
|
super.onPageAttached(newpage, oldpage);
|
||||||
|
try {
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().addEventListener(Events.ON_CTRL_KEY, this);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageDetached(Page page) {
|
||||||
|
super.onPageDetached(page);
|
||||||
|
try {
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().removeEventListener(Events.ON_CTRL_KEY, this);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set Visible
|
* Set Visible
|
||||||
* (set focus to OK if visible)
|
* (set focus to OK if visible)
|
||||||
|
@ -182,11 +203,40 @@ public class ProcessDialog extends AbstractProcessDialog implements EventListene
|
||||||
bOK.focus();
|
bOK.focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (event.getName().equals(Events.ON_CTRL_KEY)) {
|
||||||
|
KeyEvent keyEvent = (KeyEvent) event;
|
||||||
|
if (LayoutUtils.isReallyVisible(this)) {
|
||||||
|
//filter same key event that is too close
|
||||||
|
//firefox fire key event twice when grid is visible
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
if (prevKeyEvent != null && prevKeyEventTime > 0 &&
|
||||||
|
prevKeyEvent.getKeyCode() == keyEvent.getKeyCode() &&
|
||||||
|
prevKeyEvent.getTarget() == keyEvent.getTarget() &&
|
||||||
|
prevKeyEvent.isAltKey() == keyEvent.isAltKey() &&
|
||||||
|
prevKeyEvent.isCtrlKey() == keyEvent.isCtrlKey() &&
|
||||||
|
prevKeyEvent.isShiftKey() == keyEvent.isShiftKey()) {
|
||||||
|
if ((time - prevKeyEventTime) <= 300) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.onCtrlKeyEvent(keyEvent);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
super.onEvent(event);
|
super.onEvent(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onCtrlKeyEvent(KeyEvent keyEvent) {
|
||||||
|
if (keyEvent.isAltKey() && keyEvent.getKeyCode() == 0x58) { // Alt-X
|
||||||
|
if (m_WindowNo > 0) {
|
||||||
|
prevKeyEventTime = System.currentTimeMillis();
|
||||||
|
prevKeyEvent = keyEvent;
|
||||||
|
keyEvent.stopPropagation();
|
||||||
|
SessionManager.getAppDesktop().closeWindow(m_WindowNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void doOnClick(A btn) {
|
private void doOnClick(A btn) {
|
||||||
int Record_ID = 0;
|
int Record_ID = 0;
|
||||||
int AD_Table_ID =0;
|
int AD_Table_ID =0;
|
||||||
|
|
|
@ -52,6 +52,7 @@ import org.compiere.model.MPInstancePara;
|
||||||
import org.compiere.process.ProcessInfo;
|
import org.compiere.process.ProcessInfo;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
|
@ -467,10 +468,21 @@ public class ProcessParameterPanel extends Panel implements
|
||||||
}
|
}
|
||||||
else if ( !Env.ZERO.equals(para.getP_Number()) || !Env.ZERO.equals(para.getP_Number_To()) )
|
else if ( !Env.ZERO.equals(para.getP_Number()) || !Env.ZERO.equals(para.getP_Number_To()) )
|
||||||
{
|
{
|
||||||
|
if (DisplayType.isID(para.getDisplayType())) {
|
||||||
|
editor.setValue(para.getP_Number().intValue());
|
||||||
|
if (editor2 != null)
|
||||||
|
editor2.setValue(para.getP_Number_To().intValue());
|
||||||
|
} else {
|
||||||
editor.setValue(para.getP_Number());
|
editor.setValue(para.getP_Number());
|
||||||
if (editor2 != null)
|
if (editor2 != null)
|
||||||
editor2.setValue(para.getP_Number_To());
|
editor2.setValue(para.getP_Number_To());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (editor.getValue() != null) {
|
||||||
|
ValueChangeEvent changeEvent = new ValueChangeEvent(editor, editor.getColumnName(), editor.getValue(), null);
|
||||||
|
valueChange(changeEvent);
|
||||||
|
// Note that the second editor2 in ranges has no event verification
|
||||||
|
}
|
||||||
|
|
||||||
log.fine(para.toString());
|
log.fine(para.toString());
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -153,7 +153,8 @@ public class ADTreeOnDropListener implements EventListener<Event> {
|
||||||
{
|
{
|
||||||
tree.onInitRender();
|
tree.onInitRender();
|
||||||
}
|
}
|
||||||
tree.renderItemByPath(path);
|
@SuppressWarnings("unused")
|
||||||
|
Treeitem movingItem = tree.renderItemByPath(path);
|
||||||
//tree.setSelectedItem(movingItem);
|
//tree.setSelectedItem(movingItem);
|
||||||
//Events.sendEvent(tree, new Event(Events.ON_SELECT, tree));
|
//Events.sendEvent(tree, new Event(Events.ON_SELECT, tree));
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,9 @@ public class ZoomCommand implements AuService {
|
||||||
MQuery query = new MQuery(tableName);
|
MQuery query = new MQuery(tableName);
|
||||||
query.addRestriction(columnName, MQuery.EQUAL, code);
|
query.addRestriction(columnName, MQuery.EQUAL, code);
|
||||||
query.setRecordCount(1);
|
query.setRecordCount(1);
|
||||||
|
query.setZoomTableName(tableName);
|
||||||
|
query.setZoomColumnName(columnName);
|
||||||
|
query.setZoomValue(code);
|
||||||
|
|
||||||
Events.postEvent(new ZoomEvent(comp, query));
|
Events.postEvent(new ZoomEvent(comp, query));
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,13 @@ import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
|
||||||
import net.sf.jasperreports.engine.util.LocalJasperReportsContext;
|
import net.sf.jasperreports.engine.util.LocalJasperReportsContext;
|
||||||
|
|
||||||
import org.adempiere.exceptions.AdempiereException;
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
|
import org.adempiere.webui.LayoutUtils;
|
||||||
import org.adempiere.webui.apps.AEnv;
|
import org.adempiere.webui.apps.AEnv;
|
||||||
import org.adempiere.webui.component.Listbox;
|
import org.adempiere.webui.component.Listbox;
|
||||||
import org.adempiere.webui.component.Tabpanel;
|
import org.adempiere.webui.component.Tabpanel;
|
||||||
import org.adempiere.webui.component.ToolBarButton;
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
|
import org.adempiere.webui.desktop.IDesktop;
|
||||||
import org.adempiere.webui.panel.ITabOnCloseHandler;
|
import org.adempiere.webui.panel.ITabOnCloseHandler;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
import org.adempiere.webui.theme.ThemeManager;
|
import org.adempiere.webui.theme.ThemeManager;
|
||||||
|
@ -42,9 +44,11 @@ import org.compiere.util.Util;
|
||||||
import org.zkoss.util.media.AMedia;
|
import org.zkoss.util.media.AMedia;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.Executions;
|
import org.zkoss.zk.ui.Executions;
|
||||||
|
import org.zkoss.zk.ui.Page;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zk.ui.event.KeyEvent;
|
||||||
import org.zkoss.zul.Borderlayout;
|
import org.zkoss.zul.Borderlayout;
|
||||||
import org.zkoss.zul.Center;
|
import org.zkoss.zul.Center;
|
||||||
import org.zkoss.zul.Iframe;
|
import org.zkoss.zul.Iframe;
|
||||||
|
@ -58,7 +62,7 @@ public class ZkJRViewer extends Window implements EventListener<Event>, ITabOnCl
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -1250003381099609830L;
|
private static final long serialVersionUID = -7047317766671393738L;
|
||||||
|
|
||||||
private JasperPrint jasperPrint;
|
private JasperPrint jasperPrint;
|
||||||
private Listbox previewType = new Listbox();
|
private Listbox previewType = new Listbox();
|
||||||
|
@ -72,6 +76,8 @@ public class ZkJRViewer extends Window implements EventListener<Event>, ITabOnCl
|
||||||
|
|
||||||
/** Window No */
|
/** Window No */
|
||||||
private int m_WindowNo = -1;
|
private int m_WindowNo = -1;
|
||||||
|
private long prevKeyEventTime = 0;
|
||||||
|
private KeyEvent prevKeyEvent;
|
||||||
|
|
||||||
private String m_title; // local title - embedded windows clear the title
|
private String m_title; // local title - embedded windows clear the title
|
||||||
|
|
||||||
|
@ -81,9 +87,26 @@ public class ZkJRViewer extends Window implements EventListener<Event>, ITabOnCl
|
||||||
m_title = title;
|
m_title = title;
|
||||||
this.jasperPrint = jasperPrint;
|
this.jasperPrint = jasperPrint;
|
||||||
m_WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
m_WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
||||||
|
setAttribute(IDesktop.WINDOWNO_ATTRIBUTE, m_WindowNo);
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageAttached(Page newpage, Page oldpage) {
|
||||||
|
super.onPageAttached(newpage, oldpage);
|
||||||
|
try {
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().addEventListener(Events.ON_CTRL_KEY, this);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageDetached(Page page) {
|
||||||
|
super.onPageDetached(page);
|
||||||
|
try {
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().removeEventListener(Events.ON_CTRL_KEY, this);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
final boolean isCanExport=MRole.getDefault().isCanExport();
|
final boolean isCanExport=MRole.getDefault().isCanExport();
|
||||||
defaultType = MSysConfig.getValue(MSysConfig.ZK_REPORT_JASPER_OUTPUT_TYPE, "PDF",
|
defaultType = MSysConfig.getValue(MSysConfig.ZK_REPORT_JASPER_OUTPUT_TYPE, "PDF",
|
||||||
|
@ -230,9 +253,38 @@ public class ZkJRViewer extends Window implements EventListener<Event>, ITabOnCl
|
||||||
} // cmd_sendMail
|
} // cmd_sendMail
|
||||||
|
|
||||||
public void onEvent(Event event) throws Exception {
|
public void onEvent(Event event) throws Exception {
|
||||||
if(event.getName().equals(Events.ON_CLICK) || event.getName().equals(Events.ON_SELECT))
|
if (event.getName().equals(Events.ON_CLICK) || event.getName().equals(Events.ON_SELECT)) {
|
||||||
actionPerformed(event);
|
actionPerformed(event);
|
||||||
|
} else if (event.getName().equals(Events.ON_CTRL_KEY)) {
|
||||||
|
KeyEvent keyEvent = (KeyEvent) event;
|
||||||
|
if (LayoutUtils.isReallyVisible(this)) {
|
||||||
|
//filter same key event that is too close
|
||||||
|
//firefox fire key event twice when grid is visible
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
if (prevKeyEvent != null && prevKeyEventTime > 0 &&
|
||||||
|
prevKeyEvent.getKeyCode() == keyEvent.getKeyCode() &&
|
||||||
|
prevKeyEvent.getTarget() == keyEvent.getTarget() &&
|
||||||
|
prevKeyEvent.isAltKey() == keyEvent.isAltKey() &&
|
||||||
|
prevKeyEvent.isCtrlKey() == keyEvent.isCtrlKey() &&
|
||||||
|
prevKeyEvent.isShiftKey() == keyEvent.isShiftKey()) {
|
||||||
|
if ((time - prevKeyEventTime) <= 300) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.onCtrlKeyEvent(keyEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCtrlKeyEvent(KeyEvent keyEvent) {
|
||||||
|
if (keyEvent.isAltKey() && keyEvent.getKeyCode() == 0x58) { // Alt-X
|
||||||
|
if (m_WindowNo > 0) {
|
||||||
|
prevKeyEventTime = System.currentTimeMillis();
|
||||||
|
prevKeyEvent = keyEvent;
|
||||||
|
keyEvent.stopPropagation();
|
||||||
|
SessionManager.getAppDesktop().closeWindow(m_WindowNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void renderReport() throws Exception {
|
private void renderReport() throws Exception {
|
||||||
|
|
|
@ -48,6 +48,7 @@ import org.adempiere.webui.component.Mask;
|
||||||
import org.adempiere.webui.component.Tabpanel;
|
import org.adempiere.webui.component.Tabpanel;
|
||||||
import org.adempiere.webui.component.ToolBarButton;
|
import org.adempiere.webui.component.ToolBarButton;
|
||||||
import org.adempiere.webui.component.Window;
|
import org.adempiere.webui.component.Window;
|
||||||
|
import org.adempiere.webui.desktop.IDesktop;
|
||||||
import org.adempiere.webui.editor.WTableDirEditor;
|
import org.adempiere.webui.editor.WTableDirEditor;
|
||||||
import org.adempiere.webui.event.DialogEvents;
|
import org.adempiere.webui.event.DialogEvents;
|
||||||
import org.adempiere.webui.event.DrillEvent;
|
import org.adempiere.webui.event.DrillEvent;
|
||||||
|
@ -94,6 +95,7 @@ import org.zkoss.zk.ui.Page;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
import org.zkoss.zk.ui.event.Event;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
import org.zkoss.zk.ui.event.Events;
|
import org.zkoss.zk.ui.event.Events;
|
||||||
|
import org.zkoss.zk.ui.event.KeyEvent;
|
||||||
import org.zkoss.zk.ui.ext.render.DynamicMedia;
|
import org.zkoss.zk.ui.ext.render.DynamicMedia;
|
||||||
import org.zkoss.zk.ui.util.Clients;
|
import org.zkoss.zk.ui.util.Clients;
|
||||||
import org.zkoss.zul.A;
|
import org.zkoss.zul.A;
|
||||||
|
@ -137,10 +139,12 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 3463776496724974142L;
|
private static final long serialVersionUID = 946000686957291327L;
|
||||||
|
|
||||||
/** Window No */
|
/** Window No */
|
||||||
private int m_WindowNo = -1;
|
private int m_WindowNo = -1;
|
||||||
|
private long prevKeyEventTime = 0;
|
||||||
|
private KeyEvent prevKeyEvent;
|
||||||
/** Print Context */
|
/** Print Context */
|
||||||
private Properties m_ctx;
|
private Properties m_ctx;
|
||||||
/** Setting Values */
|
/** Setting Values */
|
||||||
|
@ -207,6 +211,7 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
|
|
||||||
init = false;
|
init = false;
|
||||||
m_WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
m_WindowNo = SessionManager.getAppDesktop().registerWindow(this);
|
||||||
|
setAttribute(IDesktop.WINDOWNO_ATTRIBUTE, m_WindowNo);
|
||||||
Env.setContext(re.getCtx(), m_WindowNo, "_WinInfo_IsReportViewer", "Y");
|
Env.setContext(re.getCtx(), m_WindowNo, "_WinInfo_IsReportViewer", "Y");
|
||||||
m_reportEngine = re;
|
m_reportEngine = re;
|
||||||
m_AD_Table_ID = re.getPrintFormat().getAD_Table_ID();
|
m_AD_Table_ID = re.getPrintFormat().getAD_Table_ID();
|
||||||
|
@ -223,8 +228,6 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
addEventListener(ON_RENDER_REPORT_EVENT, this);
|
addEventListener(ON_RENDER_REPORT_EVENT, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPageAttached(Page newpage, Page oldpage) {
|
public void onPageAttached(Page newpage, Page oldpage) {
|
||||||
super.onPageAttached(newpage, oldpage);
|
super.onPageAttached(newpage, oldpage);
|
||||||
|
@ -234,6 +237,7 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
m_ctx = m_reportEngine.getCtx();
|
m_ctx = m_reportEngine.getCtx();
|
||||||
init();
|
init();
|
||||||
dynInit();
|
dynInit();
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().addEventListener(Events.ON_CTRL_KEY, this);
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
@ -244,6 +248,14 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageDetached(Page page) {
|
||||||
|
super.onPageDetached(page);
|
||||||
|
try {
|
||||||
|
SessionManager.getSessionApplication().getKeylistener().removeEventListener(Events.ON_CTRL_KEY, this);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
Borderlayout layout = new Borderlayout();
|
Borderlayout layout = new Borderlayout();
|
||||||
layout.setStyle("position: absolute; height: 97%; width: 98%; border:none; padding:none; margin:none;");
|
layout.setStyle("position: absolute; height: 97%; width: 98%; border:none; padding:none; margin:none;");
|
||||||
|
@ -767,6 +779,35 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
|
||||||
else if (event.getName().equals(ON_RENDER_REPORT_EVENT))
|
else if (event.getName().equals(ON_RENDER_REPORT_EVENT))
|
||||||
{
|
{
|
||||||
onRenderReportEvent();
|
onRenderReportEvent();
|
||||||
|
} else if (event.getName().equals(Events.ON_CTRL_KEY)) {
|
||||||
|
KeyEvent keyEvent = (KeyEvent) event;
|
||||||
|
if (LayoutUtils.isReallyVisible(this)) {
|
||||||
|
//filter same key event that is too close
|
||||||
|
//firefox fire key event twice when grid is visible
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
if (prevKeyEvent != null && prevKeyEventTime > 0 &&
|
||||||
|
prevKeyEvent.getKeyCode() == keyEvent.getKeyCode() &&
|
||||||
|
prevKeyEvent.getTarget() == keyEvent.getTarget() &&
|
||||||
|
prevKeyEvent.isAltKey() == keyEvent.isAltKey() &&
|
||||||
|
prevKeyEvent.isCtrlKey() == keyEvent.isCtrlKey() &&
|
||||||
|
prevKeyEvent.isShiftKey() == keyEvent.isShiftKey()) {
|
||||||
|
if ((time - prevKeyEventTime) <= 300) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.onCtrlKeyEvent(keyEvent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCtrlKeyEvent(KeyEvent keyEvent) {
|
||||||
|
if (keyEvent.isAltKey() && keyEvent.getKeyCode() == 0x58) { // Alt-X
|
||||||
|
if (m_WindowNo > 0) {
|
||||||
|
prevKeyEventTime = System.currentTimeMillis();
|
||||||
|
prevKeyEvent = keyEvent;
|
||||||
|
keyEvent.stopPropagation();
|
||||||
|
SessionManager.getAppDesktop().closeWindow(m_WindowNo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ package org.idempiere.adinterface;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Timestamp;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
@ -170,6 +169,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
public StandardResponseDocument setDocAction(ModelSetDocActionRequestDocument req) {
|
public StandardResponseDocument setDocAction(ModelSetDocActionRequestDocument req) {
|
||||||
boolean connected = getCompiereService().isConnected();
|
boolean connected = getCompiereService().isConnected();
|
||||||
|
|
||||||
|
boolean manageTrx = this.manageTrx;
|
||||||
|
Trx trx=null;
|
||||||
try {
|
try {
|
||||||
if (!connected)
|
if (!connected)
|
||||||
getCompiereService().connect();
|
getCompiereService().connect();
|
||||||
|
@ -211,7 +212,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
manageTrx = true;
|
manageTrx = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Trx trx = Trx.get(trxName, true);
|
trx = Trx.get(trxName, true);
|
||||||
|
|
||||||
Map<String, Object> requestCtx = getRequestCtx();
|
Map<String, Object> requestCtx = getRequestCtx();
|
||||||
|
|
||||||
|
@ -298,6 +299,9 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
} finally {
|
} finally {
|
||||||
|
if (manageTrx && trx != null)
|
||||||
|
trx.close();
|
||||||
|
|
||||||
if (!connected)
|
if (!connected)
|
||||||
getCompiereService().disconnect();
|
getCompiereService().disconnect();
|
||||||
}
|
}
|
||||||
|
@ -1413,6 +1417,8 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
public WindowTabDataDocument queryData(ModelCRUDRequestDocument req) {
|
public WindowTabDataDocument queryData(ModelCRUDRequestDocument req) {
|
||||||
boolean connected = getCompiereService().isConnected();
|
boolean connected = getCompiereService().isConnected();
|
||||||
|
|
||||||
|
boolean manageTrx = this.manageTrx;
|
||||||
|
Trx trx=null;
|
||||||
try {
|
try {
|
||||||
if (!connected)
|
if (!connected)
|
||||||
getCompiereService().connect();
|
getCompiereService().connect();
|
||||||
|
@ -1435,7 +1441,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
|
|
||||||
Properties ctx = m_cs.getCtx();
|
Properties ctx = m_cs.getCtx();
|
||||||
String tableName = modelCRUD.getTableName();
|
String tableName = modelCRUD.getTableName();
|
||||||
|
Map<String, Object> reqCtx = getRequestCtx();
|
||||||
MWebServiceType m_webservicetype = getWebServiceType();
|
MWebServiceType m_webservicetype = getWebServiceType();
|
||||||
// get the PO for the tablename and record ID
|
// get the PO for the tablename and record ID
|
||||||
MTable table = MTable.get(ctx, tableName);
|
MTable table = MTable.get(ctx, tableName);
|
||||||
|
@ -1448,11 +1454,41 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
int roleid = reqlogin.getRoleID();
|
int roleid = reqlogin.getRoleID();
|
||||||
MRole role = new MRole(ctx, roleid, null);
|
MRole role = new MRole(ctx, roleid, null);
|
||||||
|
|
||||||
String sqlquery = "SELECT * FROM " + tableName;
|
// start a trx
|
||||||
sqlquery = role.addAccessSQL(sqlquery, tableName, true, true);
|
String trxName = localTrxName;
|
||||||
|
|
||||||
|
if (trxName == null) {
|
||||||
|
trxName = Trx.createTrxName("ws_modelQueryData");
|
||||||
|
manageTrx = true;
|
||||||
|
}
|
||||||
|
trx = Trx.get(trxName, true);
|
||||||
|
|
||||||
|
StringBuilder sqlBuilder = new StringBuilder(role.addAccessSQL("SELECT * FROM " + tableName, tableName, true, true));
|
||||||
|
|
||||||
|
ArrayList<Object> sqlParaList = new ArrayList<Object>();
|
||||||
|
PO holderPo = table.getPO(0, trxName);
|
||||||
|
POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
|
||||||
|
|
||||||
if (modelCRUD.getDataRow() != null)
|
if (modelCRUD.getDataRow() != null)
|
||||||
{
|
{
|
||||||
|
DataRow dr = modelCRUD.getDataRow();
|
||||||
|
DataField fields[] = dr.getFieldArray();
|
||||||
|
StandardResponseDocument stdRet = StandardResponseDocument.Factory.newInstance();
|
||||||
|
StandardResponse stdResp = stdRet.addNewStandardResponse();
|
||||||
|
|
||||||
|
StandardResponseDocument retResp = invokeWSValidator(m_webservicetype, IWSValidator.TIMING_BEFORE_PARSE, holderPo, fields, trx,
|
||||||
|
reqCtx, stdResp, stdRet);
|
||||||
|
if (retResp != null){
|
||||||
|
throw new IdempiereServiceFault(retResp.getStandardResponse().getError(), new QName("queryData"));
|
||||||
|
}
|
||||||
|
|
||||||
|
retResp = scanFields(fields, m_webservicetype, holderPo, poinfo, trx, stdResp, stdRet);
|
||||||
|
|
||||||
|
if (retResp != null){
|
||||||
|
throw new IdempiereServiceFault(retResp.getStandardResponse().getError(), new QName("queryData"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (DataField field : modelCRUD.getDataRow().getFieldArray()) {
|
for (DataField field : modelCRUD.getDataRow().getFieldArray()) {
|
||||||
if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) {
|
if (m_webservicetype.isInputColumnNameAllowed(field.getColumn())) {
|
||||||
|
|
||||||
|
@ -1461,11 +1497,14 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
I_AD_Column col = inputField.getAD_Column();
|
I_AD_Column col = inputField.getAD_Column();
|
||||||
String sqlType = DisplayType.getSQLDataType(col.getAD_Reference_ID(), col.getColumnName(), col.getFieldLength());
|
String sqlType = DisplayType.getSQLDataType(col.getAD_Reference_ID(), col.getColumnName(), col.getFieldLength());
|
||||||
if(sqlType.contains("CHAR"))
|
if(sqlType.contains("CHAR"))
|
||||||
sqlquery += " AND " + field.getColumn() + " LIKE ?";
|
sqlBuilder.append(" AND ").append(field.getColumn()).append(" LIKE ?");
|
||||||
else
|
else
|
||||||
sqlquery += " AND " + field.getColumn() + "=?";
|
sqlBuilder.append(" AND ").append(field.getColumn()).append("=?");
|
||||||
|
|
||||||
|
sqlParaList.add(holderPo.get_Value(field.getColumn()));
|
||||||
// End Jan Thielemann Solution for query using the sentence like
|
// End Jan Thielemann Solution for query using the sentence like
|
||||||
} else {
|
}else if(m_webservicetype.getFieldInput(field.getColumn())==null){
|
||||||
|
//If not even ctx variable column
|
||||||
throw new IdempiereServiceFault("Web service type "
|
throw new IdempiereServiceFault("Web service type "
|
||||||
+ m_webservicetype.getValue() + ": input column "
|
+ m_webservicetype.getValue() + ": input column "
|
||||||
+ field.getColumn() + " not allowed", new QName("queryData"));
|
+ field.getColumn() + " not allowed", new QName("queryData"));
|
||||||
|
@ -1473,10 +1512,11 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modelCRUD.getFilter() != null && modelCRUD.getFilter().length() > 0)
|
if (modelCRUD.getFilter() != null && modelCRUD.getFilter().length() > 0){
|
||||||
sqlquery += " AND " + modelCRUD.getFilter();
|
String sql = parseSQL(" WHERE " + modelCRUD.getFilter(), sqlParaList, holderPo, poinfo, reqCtx);
|
||||||
|
sqlBuilder.append(" AND ").append(sql.substring(6));
|
||||||
|
}
|
||||||
|
|
||||||
POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
|
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
int rowCnt = 0;
|
int rowCnt = 0;
|
||||||
int offset = modelCRUD.getOffset();
|
int offset = modelCRUD.getOffset();
|
||||||
|
@ -1486,58 +1526,10 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
ResultSet rsquery = null;
|
ResultSet rsquery = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
pstmtquery = DB.prepareStatement (sqlquery, localTrxName);
|
pstmtquery = DB.prepareStatement (sqlBuilder.toString(), trxName);
|
||||||
int p = 1;
|
DB.setParameters(pstmtquery, sqlParaList);
|
||||||
if (modelCRUD.getDataRow() != null)
|
|
||||||
{
|
|
||||||
for (DataField field : modelCRUD.getDataRow().getFieldArray()) {
|
|
||||||
int idx = poinfo.getColumnIndex(field.getColumn());
|
|
||||||
Class<?> c = poinfo.getColumnClass(idx);
|
|
||||||
if (c == Integer.class)
|
|
||||||
{
|
|
||||||
int value = 0;
|
|
||||||
if (Util.isEmpty(field.getVal()) && !Util.isEmpty(field.getLval()))
|
|
||||||
{
|
|
||||||
Lookup lookup = null;
|
|
||||||
int idxcol = poinfo.getColumnIndex(field.getColumn());
|
|
||||||
X_WS_WebServiceFieldInput fieldInput = m_webservicetype.getFieldInput(field.getColumn());
|
|
||||||
if(fieldInput.getAD_Reference_ID() > 0 && fieldInput.getAD_Reference_Value_ID()>0)
|
|
||||||
{
|
|
||||||
try{
|
|
||||||
lookup = MLookupFactory.get(m_cs.getCtx(),0,poinfo.getAD_Column_ID(poinfo.getColumnName(idxcol)),fieldInput.getAD_Reference_ID(),Env.getLanguage(m_cs.getCtx()),poinfo.getColumnName(idxcol),fieldInput.getAD_Reference_Value_ID(),false,null);
|
|
||||||
}catch (Exception e) {
|
|
||||||
throw new IdempiereServiceFault("Exception in resolving overridden lookup ", new QName(
|
|
||||||
"LookupResolutionFailed"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lookup = poinfo.getColumnLookup(idxcol);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lookup == null) {
|
rsquery = pstmtquery.executeQuery();
|
||||||
throw new IdempiereServiceFault(field.getColumn() + " is not lookup column. Pass Value in val element ", new QName(
|
|
||||||
"LookupResolutionFailed"));
|
|
||||||
}
|
|
||||||
|
|
||||||
String sql = ADLookup.getDirectAccessSQL(lookup, field.getLval().toUpperCase());
|
|
||||||
int id = DB.getSQLValue(localTrxName, sql);
|
|
||||||
if (id > 0)
|
|
||||||
value = id;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
value = Integer.valueOf(field.getVal());
|
|
||||||
}
|
|
||||||
pstmtquery.setInt(p++, value);
|
|
||||||
}
|
|
||||||
else if (c == Timestamp.class)
|
|
||||||
pstmtquery.setTimestamp(p++, Timestamp.valueOf(field.getVal()));
|
|
||||||
else if (c == Boolean.class || c == String.class)
|
|
||||||
pstmtquery.setString(p++, field.getVal());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rsquery = pstmtquery.executeQuery ();
|
|
||||||
// Angelo Dabala' (genied) must create just one DataSet, moved outside of the while loop
|
// Angelo Dabala' (genied) must create just one DataSet, moved outside of the while loop
|
||||||
DataSet ds = resp.addNewDataSet();
|
DataSet ds = resp.addNewDataSet();
|
||||||
while (rsquery.next ()) {
|
while (rsquery.next ()) {
|
||||||
|
@ -1559,6 +1551,7 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
log.log(Level.SEVERE, e.getLocalizedMessage(), e);
|
||||||
|
throw new IdempiereServiceFault(e);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -1574,6 +1567,9 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
} finally {
|
} finally {
|
||||||
|
if (manageTrx && trx != null)
|
||||||
|
trx.close();
|
||||||
|
|
||||||
if (!connected)
|
if (!connected)
|
||||||
getCompiereService().disconnect();
|
getCompiereService().disconnect();
|
||||||
}
|
}
|
||||||
|
|
|
@ -402,6 +402,7 @@ public class AbstractService {
|
||||||
|
|
||||||
firstInd = sql.indexOf('@');
|
firstInd = sql.indexOf('@');
|
||||||
}
|
}
|
||||||
|
sqlBuilder.append(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue