diff --git a/migration/i2.1/oracle/201504201502_IDEMPIERE-475.sql b/migration/i2.1/oracle/201504201502_IDEMPIERE-475.sql new file mode 100644 index 0000000000..a7c67ac2b0 --- /dev/null +++ b/migration/i2.1/oracle/201504201502_IDEMPIERE-475.sql @@ -0,0 +1,35 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-475 Show quotation number on invoice +-- Apr 20, 2015 2:46:17 PM COT +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (200199,0,0,'Y',TO_DATE('2015-04-20 14:46:17','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2015-04-20 14:46:17','YYYY-MM-DD HH24:MI:SS'),100,'QuotationOrder_ID','Quotation','Quotation used for generating this order','Quotation','D','2490fc7b-55b8-4957-b7b3-66d92142f301') +; + +-- Apr 20, 2015 2:50:54 PM COT +INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Reference_Value_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure) VALUES (200819,0,'Quotation','Quotation used for generating this order',259,'QuotationOrder_ID',10,'N','N','N','N','N',0,'N',30,290,0,0,'Y',TO_DATE('2015-04-20 14:50:54','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2015-04-20 14:50:54','YYYY-MM-DD HH24:MI:SS'),100,200199,'Y','N','D','N','N','N','Y','f0bc7f90-eca2-412b-ae6f-da8fe38b08d3','Y',0,'N','N') +; + +-- Apr 20, 2015 2:57:31 PM COT +UPDATE AD_Column SET FKConstraintName='QuotationOrder_COrder', FKConstraintType='N',Updated=TO_DATE('2015-04-20 14:57:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200819 +; + +-- Apr 20, 2015 2:57:31 PM COT +ALTER TABLE C_Order ADD QuotationOrder_ID NUMBER(10) DEFAULT NULL +; + +-- Apr 20, 2015 2:57:32 PM COT +ALTER TABLE C_Order ADD CONSTRAINT QuotationOrder_COrder FOREIGN KEY (QuotationOrder_ID) REFERENCES c_order(c_order_id) DEFERRABLE INITIALLY DEFERRED +; + +-- Apr 20, 2015 2:58:16 PM COT +INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (200756,'Quotation','Quotation used for generating this order',186,200819,'Y',10,570,'N','N','N','N',0,0,'Y',TO_DATE('2015-04-20 14:58:16','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2015-04-20 14:58:16','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','479c2982-2986-4b25-9171-172921522732','Y',570,2) +; + +-- Apr 20, 2015 3:00:55 PM COT +UPDATE AD_Field SET DisplayLogic='@QuotationOrder_ID@>0', IsReadOnly='Y',Updated=TO_DATE('2015-04-20 15:00:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200756 +; + +SELECT register_migration_script('201504201502_IDEMPIERE-475.sql') FROM dual +; + diff --git a/migration/i2.1/oracle/201504211222_IDEMPIERE-2587.sql b/migration/i2.1/oracle/201504211222_IDEMPIERE-2587.sql new file mode 100644 index 0000000000..47f3b2c4ea --- /dev/null +++ b/migration/i2.1/oracle/201504211222_IDEMPIERE-2587.sql @@ -0,0 +1,19 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-2587 Can't login by SuperUser to client with client roles has Use User Org Access +-- Apr 21, 2015 12:20:54 PM COT +UPDATE AD_Tab SET WhereClause=NULL,Updated=TO_DATE('2015-04-21 12:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=118 +; + +-- Apr 21, 2015 12:21:25 PM COT +UPDATE AD_Column SET DefaultValue='@#AD_Client_ID@',Updated=TO_DATE('2015-04-21 12:21:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=13440 +; + +-- Apr 21, 2015 12:21:30 PM COT +UPDATE AD_Column SET DefaultValue='@#AD_Org_ID@', IsUpdateable='N',Updated=TO_DATE('2015-04-21 12:21:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=13439 +; + +SELECT register_migration_script('201504211222_IDEMPIERE-2587.sql') FROM dual +; + diff --git a/migration/i2.1/oracle/201504211325_IDEMPIERE-2584.sql b/migration/i2.1/oracle/201504211325_IDEMPIERE-2584.sql new file mode 100644 index 0000000000..414b430863 --- /dev/null +++ b/migration/i2.1/oracle/201504211325_IDEMPIERE-2584.sql @@ -0,0 +1,19 @@ +SET SQLBLANKLINES ON +SET DEFINE OFF + +-- IDEMPIERE-2584 Field Sequence items not placed together in Purchase Order +-- Apr 21, 2015 1:23:36 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_DATE('2015-04-21 13:23:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55413 +; + +-- Apr 21, 2015 1:23:43 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_DATE('2015-04-21 13:23:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55414 +; + +-- Apr 21, 2015 1:23:50 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_DATE('2015-04-21 13:23:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55415 +; + +SELECT register_migration_script('201504211325_IDEMPIERE-2584.sql') FROM dual +; + diff --git a/migration/i2.1/oracle/201504220959_IDEMPIERE-581.sql b/migration/i2.1/oracle/201504220959_IDEMPIERE-581.sql new file mode 100644 index 0000000000..7d6f3c1867 --- /dev/null +++ b/migration/i2.1/oracle/201504220959_IDEMPIERE-581.sql @@ -0,0 +1,6 @@ +delete from ad_preference where ad_user_id is null and (attribute like '%|DetailPane.Height' or attribute like '%|DetailPane.IsOpen') +; + +SELECT register_migration_script('201504220959_IDEMPIERE-581.sql') FROM dual +; + diff --git a/migration/i2.1/postgresql/201504201502_IDEMPIERE-475.sql b/migration/i2.1/postgresql/201504201502_IDEMPIERE-475.sql new file mode 100644 index 0000000000..7e9482b05e --- /dev/null +++ b/migration/i2.1/postgresql/201504201502_IDEMPIERE-475.sql @@ -0,0 +1,32 @@ +-- IDEMPIERE-475 Show quotation number on invoice +-- Apr 20, 2015 2:46:17 PM COT +INSERT INTO AD_Element (AD_Element_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,ColumnName,Name,Description,PrintName,EntityType,AD_Element_UU) VALUES (200199,0,0,'Y',TO_TIMESTAMP('2015-04-20 14:46:17','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2015-04-20 14:46:17','YYYY-MM-DD HH24:MI:SS'),100,'QuotationOrder_ID','Quotation','Quotation used for generating this order','Quotation','D','2490fc7b-55b8-4957-b7b3-66d92142f301') +; + +-- Apr 20, 2015 2:50:54 PM COT +INSERT INTO AD_Column (AD_Column_ID,Version,Name,Description,AD_Table_ID,ColumnName,FieldLength,IsKey,IsParent,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsEncrypted,AD_Reference_ID,AD_Reference_Value_ID,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Element_ID,IsUpdateable,IsSelectionColumn,EntityType,IsSyncDatabase,IsAlwaysUpdateable,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsAllowCopy,SeqNoSelection,IsToolbarButton,IsSecure) VALUES (200819,0,'Quotation','Quotation used for generating this order',259,'QuotationOrder_ID',10,'N','N','N','N','N',0,'N',30,290,0,0,'Y',TO_TIMESTAMP('2015-04-20 14:50:54','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2015-04-20 14:50:54','YYYY-MM-DD HH24:MI:SS'),100,200199,'Y','N','D','N','N','N','Y','f0bc7f90-eca2-412b-ae6f-da8fe38b08d3','Y',0,'N','N') +; + +-- Apr 20, 2015 2:57:31 PM COT +UPDATE AD_Column SET FKConstraintName='QuotationOrder_COrder', FKConstraintType='N',Updated=TO_TIMESTAMP('2015-04-20 14:57:31','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200819 +; + +-- Apr 20, 2015 2:57:31 PM COT +ALTER TABLE C_Order ADD COLUMN QuotationOrder_ID NUMERIC(10) DEFAULT NULL +; + +-- Apr 20, 2015 2:57:32 PM COT +ALTER TABLE C_Order ADD CONSTRAINT QuotationOrder_COrder FOREIGN KEY (QuotationOrder_ID) REFERENCES c_order(c_order_id) DEFERRABLE INITIALLY DEFERRED +; + +-- Apr 20, 2015 2:58:16 PM COT +INSERT INTO AD_Field (AD_Field_ID,Name,Description,AD_Tab_ID,AD_Column_ID,IsDisplayed,DisplayLength,SeqNo,IsSameLine,IsHeading,IsFieldOnly,IsEncrypted,AD_Client_ID,AD_Org_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,IsReadOnly,IsCentrallyMaintained,EntityType,AD_Field_UU,IsDisplayedGrid,SeqNoGrid,ColumnSpan) VALUES (200756,'Quotation','Quotation used for generating this order',186,200819,'Y',10,570,'N','N','N','N',0,0,'Y',TO_TIMESTAMP('2015-04-20 14:58:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2015-04-20 14:58:16','YYYY-MM-DD HH24:MI:SS'),100,'N','Y','D','479c2982-2986-4b25-9171-172921522732','Y',570,2) +; + +-- Apr 20, 2015 3:00:55 PM COT +UPDATE AD_Field SET DisplayLogic='@QuotationOrder_ID@>0', IsReadOnly='Y',Updated=TO_TIMESTAMP('2015-04-20 15:00:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200756 +; + +SELECT register_migration_script('201504201502_IDEMPIERE-475.sql') FROM dual +; + diff --git a/migration/i2.1/postgresql/201504211222_IDEMPIERE-2587.sql b/migration/i2.1/postgresql/201504211222_IDEMPIERE-2587.sql new file mode 100644 index 0000000000..0001c06c0e --- /dev/null +++ b/migration/i2.1/postgresql/201504211222_IDEMPIERE-2587.sql @@ -0,0 +1,16 @@ +-- IDEMPIERE-2587 Can't login by SuperUser to client with client roles has Use User Org Access +-- Apr 21, 2015 12:20:54 PM COT +UPDATE AD_Tab SET WhereClause=NULL,Updated=TO_TIMESTAMP('2015-04-21 12:20:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=118 +; + +-- Apr 21, 2015 12:21:25 PM COT +UPDATE AD_Column SET DefaultValue='@#AD_Client_ID@',Updated=TO_TIMESTAMP('2015-04-21 12:21:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=13440 +; + +-- Apr 21, 2015 12:21:30 PM COT +UPDATE AD_Column SET DefaultValue='@#AD_Org_ID@', IsUpdateable='N',Updated=TO_TIMESTAMP('2015-04-21 12:21:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=13439 +; + +SELECT register_migration_script('201504211222_IDEMPIERE-2587.sql') FROM dual +; + diff --git a/migration/i2.1/postgresql/201504211325_IDEMPIERE-2584.sql b/migration/i2.1/postgresql/201504211325_IDEMPIERE-2584.sql new file mode 100644 index 0000000000..978edd5d9b --- /dev/null +++ b/migration/i2.1/postgresql/201504211325_IDEMPIERE-2584.sql @@ -0,0 +1,16 @@ +-- IDEMPIERE-2584 Field Sequence items not placed together in Purchase Order +-- Apr 21, 2015 1:23:36 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_TIMESTAMP('2015-04-21 13:23:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55413 +; + +-- Apr 21, 2015 1:23:43 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_TIMESTAMP('2015-04-21 13:23:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55414 +; + +-- Apr 21, 2015 1:23:50 PM COT +UPDATE AD_Field SET AD_FieldGroup_ID=130,Updated=TO_TIMESTAMP('2015-04-21 13:23:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=55415 +; + +SELECT register_migration_script('201504211325_IDEMPIERE-2584.sql') FROM dual +; + diff --git a/migration/i2.1/postgresql/201504220959_IDEMPIERE-581.sql b/migration/i2.1/postgresql/201504220959_IDEMPIERE-581.sql new file mode 100644 index 0000000000..7d6f3c1867 --- /dev/null +++ b/migration/i2.1/postgresql/201504220959_IDEMPIERE-581.sql @@ -0,0 +1,6 @@ +delete from ad_preference where ad_user_id is null and (attribute like '%|DetailPane.Height' or attribute like '%|DetailPane.IsOpen') +; + +SELECT register_migration_script('201504220959_IDEMPIERE-581.sql') FROM dual +; + diff --git a/org.adempiere.base.process/src/org/compiere/process/CopyOrder.java b/org.adempiere.base.process/src/org/compiere/process/CopyOrder.java index 7b00d93de2..39bfd075b7 100644 --- a/org.adempiere.base.process/src/org/compiere/process/CopyOrder.java +++ b/org.adempiere.base.process/src/org/compiere/process/CopyOrder.java @@ -86,6 +86,7 @@ public class CopyOrder extends SvrProcess MOrder newOrder = MOrder.copyFrom (from, p_DateDoc, dt.getC_DocType_ID(), dt.isSOTrx(), false, true, get_TrxName()); // copy ASI newOrder.setC_DocTypeTarget_ID(p_C_DocType_ID); + newOrder.setQuotationOrder_ID(from.getC_Order_ID()); // IDEMPIERE-475 boolean OK = newOrder.save(); if (!OK) throw new IllegalStateException("Could not create new Order"); diff --git a/org.adempiere.base.process/src/org/compiere/process/OrderPOCreate.java b/org.adempiere.base.process/src/org/compiere/process/OrderPOCreate.java index 1d8f4943de..957df648e2 100644 --- a/org.adempiere.base.process/src/org/compiere/process/OrderPOCreate.java +++ b/org.adempiere.base.process/src/org/compiere/process/OrderPOCreate.java @@ -189,6 +189,7 @@ public class OrderPOCreate extends SvrProcess + "FROM M_Product_PO po" + " INNER JOIN C_OrderLine ol ON (po.M_Product_ID=ol.M_Product_ID) " + "WHERE ol.C_Order_ID=? AND po.IsCurrentVendor='Y' " + + "AND po.IsActive='Y' " + ((p_Vendor_ID > 0) ? " AND po.C_BPartner_ID=? " : "") + "GROUP BY po.M_Product_ID " + "ORDER BY 1"; @@ -283,13 +284,14 @@ public class OrderPOCreate extends SvrProcess if ( p_IsDropShip ) { po.setIsDropShip(p_IsDropShip); - + po.setDeliveryViaRule(so.getDeliveryViaRule()); + po.setM_Shipper_ID(so.getM_Shipper_ID()); + if (so.isDropShip() && so.getDropShip_BPartner_ID() != 0 ) { po.setDropShip_BPartner_ID(so.getDropShip_BPartner_ID()); po.setDropShip_Location_ID(so.getDropShip_Location_ID()); po.setDropShip_User_ID(so.getDropShip_User_ID()); - } - else { + } else { po.setDropShip_BPartner_ID(so.getC_BPartner_ID()); po.setDropShip_Location_ID(so.getC_BPartner_Location_ID()); po.setDropShip_User_ID(so.getAD_User_ID()); diff --git a/org.adempiere.base/src/org/compiere/model/I_C_Order.java b/org.adempiere.base/src/org/compiere/model/I_C_Order.java index 151e506e1d..2abfe29438 100644 --- a/org.adempiere.base/src/org/compiere/model/I_C_Order.java +++ b/org.adempiere.base/src/org/compiere/model/I_C_Order.java @@ -1071,6 +1071,21 @@ public interface I_C_Order */ public String getPromotionCode(); + /** Column name QuotationOrder_ID */ + public static final String COLUMNNAME_QuotationOrder_ID = "QuotationOrder_ID"; + + /** Set Quotation. + * Quotation used for generating this order + */ + public void setQuotationOrder_ID (int QuotationOrder_ID); + + /** Get Quotation. + * Quotation used for generating this order + */ + public int getQuotationOrder_ID(); + + public org.compiere.model.I_C_Order getQuotationOrder() throws RuntimeException; + /** Column name Ref_Order_ID */ public static final String COLUMNNAME_Ref_Order_ID = "Ref_Order_ID"; diff --git a/org.adempiere.base/src/org/compiere/model/MInvoice.java b/org.adempiere.base/src/org/compiere/model/MInvoice.java index 3f67ebf446..ad7c08e171 100644 --- a/org.adempiere.base/src/org/compiere/model/MInvoice.java +++ b/org.adempiere.base/src/org/compiere/model/MInvoice.java @@ -1765,6 +1765,9 @@ public class MInvoice extends X_C_Invoice implements DocAction payment.saveEx(); info.append("@C_Payment_ID@: " + payment.getDocumentInfo()); + // IDEMPIERE-2588 - add the allocation generation with the payment + if (payment.getJustCreatedAllocInv() != null) + addDocsPostProcess(payment.getJustCreatedAllocInv()); } // Payment // Update Order & Match diff --git a/org.adempiere.base/src/org/compiere/model/MPayment.java b/org.adempiere.base/src/org/compiere/model/MPayment.java index 74958be833..d9bd87d70a 100644 --- a/org.adempiere.base/src/org/compiere/model/MPayment.java +++ b/org.adempiere.base/src/org/compiere/model/MPayment.java @@ -83,7 +83,7 @@ public class MPayment extends X_C_Payment /** * */ - private static final long serialVersionUID = -7646717328867858897L; + private static final long serialVersionUID = -7179638016937305380L; /** * Get Payments Of BPartner @@ -2303,6 +2303,7 @@ public class MPayment extends X_C_Payment throw new AdempiereException("Failed when processing document - " + alloc.getProcessMsg()); // end added alloc.saveEx(get_TrxName()); + m_justCreatedAllocInv = alloc; m_processMsg = "@C_AllocationHdr_ID@: " + alloc.getDocumentNo(); // Get Project from Invoice @@ -2997,5 +2998,11 @@ public class MPayment extends X_C_Payment return MPaymentTransaction.getAllIDs(Table_Name, whereClause.toString(), trxName); } + + // IDEMPIERE-2588 + private MAllocationHdr m_justCreatedAllocInv = null; + public MAllocationHdr getJustCreatedAllocInv() { + return m_justCreatedAllocInv; + } } // MPayment diff --git a/org.adempiere.base/src/org/compiere/model/X_C_Order.java b/org.adempiere.base/src/org/compiere/model/X_C_Order.java index 37c68b26ce..c33ece73fa 100644 --- a/org.adempiere.base/src/org/compiere/model/X_C_Order.java +++ b/org.adempiere.base/src/org/compiere/model/X_C_Order.java @@ -33,7 +33,7 @@ public class X_C_Order extends PO implements I_C_Order, I_Persistent /** * */ - private static final long serialVersionUID = 20141030L; + private static final long serialVersionUID = 20150420L; /** Standard Constructor */ public X_C_Order (Properties ctx, int C_Order_ID, String trxName) @@ -1983,6 +1983,34 @@ public class X_C_Order extends PO implements I_C_Order, I_Persistent return (String)get_Value(COLUMNNAME_PromotionCode); } + public org.compiere.model.I_C_Order getQuotationOrder() throws RuntimeException + { + return (org.compiere.model.I_C_Order)MTable.get(getCtx(), org.compiere.model.I_C_Order.Table_Name) + .getPO(getQuotationOrder_ID(), get_TrxName()); } + + /** Set Quotation. + @param QuotationOrder_ID + Quotation used for generating this order + */ + public void setQuotationOrder_ID (int QuotationOrder_ID) + { + if (QuotationOrder_ID < 1) + set_Value (COLUMNNAME_QuotationOrder_ID, null); + else + set_Value (COLUMNNAME_QuotationOrder_ID, Integer.valueOf(QuotationOrder_ID)); + } + + /** Get Quotation. + @return Quotation used for generating this order + */ + public int getQuotationOrder_ID () + { + Integer ii = (Integer)get_Value(COLUMNNAME_QuotationOrder_ID); + if (ii == null) + return 0; + return ii.intValue(); + } + public org.compiere.model.I_C_Order getRef_Order() throws RuntimeException { return (org.compiere.model.I_C_Order)MTable.get(getCtx(), org.compiere.model.I_C_Order.Table_Name) diff --git a/org.adempiere.base/src/org/compiere/process/DocumentEngine.java b/org.adempiere.base/src/org/compiere/process/DocumentEngine.java index 8e33cf54fa..6b5d477132 100644 --- a/org.adempiere.base/src/org/compiere/process/DocumentEngine.java +++ b/org.adempiere.base/src/org/compiere/process/DocumentEngine.java @@ -316,7 +316,7 @@ public class DocumentEngine implements DocAction if (m_document != null && ok) { // PostProcess documents when invoice or inout (this is to postprocess the generated MatchPO and MatchInv if any) - ArrayList docsPostProcess = new ArrayList();; + ArrayList docsPostProcess = new ArrayList(); if (m_document instanceof MInvoice || m_document instanceof MInOut) { if (m_document instanceof MInvoice) { docsPostProcess = ((MInvoice) m_document).getDocsPostProcess(); diff --git a/org.adempiere.base/src/org/compiere/tools/FileUtil.java b/org.adempiere.base/src/org/compiere/tools/FileUtil.java index 63de179c43..8f3a4e0d64 100644 --- a/org.adempiere.base/src/org/compiere/tools/FileUtil.java +++ b/org.adempiere.base/src/org/compiere/tools/FileUtil.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Calendar; +import org.compiere.util.Env; import org.compiere.util.Util; /** @@ -423,7 +424,7 @@ public class FileUtil String dt = sdf.format(cal.getTime()); String cleanName = subject.replaceAll("[ &/]", ""); String localFile = System.getProperty("java.io.tmpdir") - + System.getProperty("file.separator") + cleanName + "_" + dt + + System.getProperty("file.separator") + cleanName + "_" + dt + "_" + Env.getContext(Env.getCtx(), "#AD_Session_ID") + extension; return localFile; } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java index 3ed9748c6a..d6e4980d53 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/adwindow/ADTabpanel.java @@ -29,6 +29,7 @@ import org.adempiere.base.Core; import org.adempiere.exceptions.AdempiereException; import org.adempiere.webui.AdempiereIdGenerator; import org.adempiere.webui.AdempiereWebUI; +import org.adempiere.webui.ClientInfo; import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Borderlayout; import org.adempiere.webui.component.Column; @@ -51,6 +52,7 @@ import org.adempiere.webui.editor.WPaymentEditor; import org.adempiere.webui.editor.WebEditorFactory; import org.adempiere.webui.event.ContextMenuListener; import org.adempiere.webui.panel.HelpController; +import org.adempiere.webui.session.SessionManager; import org.adempiere.webui.util.GridTabDataBinder; import org.adempiere.webui.util.TreeUtils; import org.adempiere.webui.window.FDialog; @@ -64,6 +66,7 @@ import org.compiere.model.I_AD_Preference; import org.compiere.model.MLookup; import org.compiere.model.MPreference; import org.compiere.model.MRole; +import org.compiere.model.MSysConfig; import org.compiere.model.MTab; import org.compiere.model.MTable; import org.compiere.model.MToolBarButton; @@ -86,6 +89,7 @@ import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.HtmlBasedComponent; import org.zkoss.zk.ui.IdSpace; +import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -283,6 +287,22 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer south.setSplittable(true); south.setOpen(isOpenDetailPane()); south.setSclass("adwindow-gridview-detail"); + String height = heigthDetailPane(); + if (! Util.isEmpty(height)) { + try { + ClientInfo browserInfo = SessionManager.getAppDesktop().getClientInfo(); + int browserHeight = browserInfo.desktopHeight; + int prefHeight = Integer.valueOf(height.replace("px", "")); + int topmarginpx = MSysConfig.getIntValue("TOP_MARGIN_PIXELS_FOR_HEADER", 222); + int maxHeight = browserHeight - topmarginpx; + if (prefHeight <= maxHeight) { + height = Integer.toString(prefHeight) + "px"; + formContainer.getSouth().setHeight(height); + } + } catch (Exception e) { + // just ignore exception is harmless here, consequence is just not setting height so it will assume the default of theme + } + } } @Override @@ -1085,19 +1105,19 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer int windowId = getGridTab().getAD_Window_ID(); int adTabId = getGridTab().getAD_Tab_ID(); if (windowId > 0 && adTabId > 0) { - Query query = new Query(Env.getCtx(), MTable.get(Env.getCtx(), I_AD_Preference.Table_ID), "AD_Window_ID=? AND Attribute=? AND AD_Process_ID IS NULL AND PreferenceFor = 'W'", null); + Query query = new Query(Env.getCtx(), MTable.get(Env.getCtx(), I_AD_Preference.Table_ID), "AD_Window_ID=? AND Attribute=? AND AD_User_ID=? AND AD_Process_ID IS NULL AND PreferenceFor = 'W'", null); + int userId = Env.getAD_User_ID(Env.getCtx()); MPreference preference = query.setOnlyActiveRecords(true) .setApplyAccessFilter(true) - .setParameters(windowId, adTabId+"|DetailPane.IsOpen") + .setParameters(windowId, adTabId+"|DetailPane.IsOpen", userId) .first(); - if (preference != null && preference.getAD_Preference_ID() > 0) { - preference.setValue(value ? "Y" : "N"); - } else { + if (preference == null || preference.getAD_Preference_ID() <= 0) { preference = new MPreference(Env.getCtx(), 0, null); preference.setAD_Window_ID(windowId); + preference.setAD_User_ID(userId); preference.setAttribute(adTabId+"|DetailPane.IsOpen"); - preference.setValue(value ? "Y" : "N"); } + preference.setValue(value ? "Y" : "N"); preference.saveEx(); //update current context Env.getCtx().setProperty("P"+windowId+"|"+adTabId+"|DetailPane.IsOpen", value ? "Y" : "N"); @@ -1139,7 +1159,17 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer } return open; } - + + private String heigthDetailPane() { + String height = null; + int windowId = getGridTab().getAD_Window_ID(); + int adTabId = getGridTab().getAD_Tab_ID(); + if (windowId > 0 && adTabId > 0) { + height = Env.getPreference(Env.getCtx(), windowId, adTabId+"|DetailPane.Height", false); + } + return height; + } + private void navigateTo(DefaultTreeNode value) { MTreeNode treeNode = value.getData(); // We Have a TreeNode @@ -1704,4 +1734,36 @@ DataStatusListener, IADTabpanel, IdSpace, IFieldEditorContainer return retValue; } + @Override + public void onPageDetached(Page page) { + if (formContainer.getSouth() != null) { + if (formContainer.getSouth().isVisible() && formContainer.getSouth().isOpen()) { + String height = formContainer.getSouth().getHeight(); + if (! Util.isEmpty(height)) { + int windowId = getGridTab().getAD_Window_ID(); + int adTabId = getGridTab().getAD_Tab_ID(); + if (windowId > 0 && adTabId > 0) { + Query query = new Query(Env.getCtx(), MTable.get(Env.getCtx(), I_AD_Preference.Table_ID), "AD_Window_ID=? AND Attribute=? AND AD_User_ID=? AND AD_Process_ID IS NULL AND PreferenceFor = 'W'", null); + int userId = Env.getAD_User_ID(Env.getCtx()); + MPreference preference = query.setOnlyActiveRecords(true) + .setApplyAccessFilter(true) + .setParameters(windowId, adTabId+"|DetailPane.Height", userId) + .first(); + if (preference == null || preference.getAD_Preference_ID() <= 0) { + preference = new MPreference(Env.getCtx(), 0, null); + preference.setAD_Window_ID(windowId); + preference.setAD_User_ID(userId); + preference.setAttribute(adTabId+"|DetailPane.Height"); + } + preference.setValue(height); + preference.saveEx(); + //update current context + Env.getCtx().setProperty("P"+windowId+"|"+adTabId+"|DetailPane.Height", height); + } + } + } + } + super.onPageDetached(page); + } + } diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java index 34ceaea40d..e86dc61474 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WReportCustomization.java @@ -200,7 +200,9 @@ public class WReportCustomization implements IFormController,EventListener implements Listit listCell.setParent(item); if (tooltip != null) listCell.setTooltiptext(tooltip); + // IDEMPIERE-492 + boolean isSummary = false; + Object li = null; + if (item != null && list != null) + li = list.get(item.getIndex()); + if (li != null && li instanceof TreeMaintenance.ListItem) + isSummary = ((TreeMaintenance.ListItem)li).isSummary; + if (isSummary) + ZkCssHelper.appendStyle(listCell, "font-weight: bold"); } private void renderCollection(Listitem item, Collection data) { diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java index ac8d3b79c0..341b6b7ba3 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/LoginPanel.java @@ -624,12 +624,14 @@ public class LoginPanel extends Window implements EventListener } private String getUpdateTimeoutTextScript() { - String msg = Msg.getMsg(Env.getCtx(), "SessionTimeoutText"); + String msg = Msg.getMsg(Env.getCtx(), "SessionTimeoutText").trim(); //IDEMPIERE-847 + String continueNsg = Msg.getMsg(Env.getCtx(), "continue").trim(); //IDEMPIERE-847 if (msg == null || msg.equals("SessionTimeoutText")) { return null; } msg = Strings.escape(msg, "\""); - String s = "adempiere.store.set(\"zkTimeoutText\", \"" + msg + "\")"; + String s = "adempiere.store.set(\"zkTimeoutText\", \"" + msg + "\");";//IDEMPIERE-847 + s = s + " adempiere.store.set(\"zkContinueText\", \"" + continueNsg + "\");"; //IDEMPIERE-847 return s; } diff --git a/org.adempiere.ui.zk/sessiontimeout.zul b/org.adempiere.ui.zk/sessiontimeout.zul index 77380fb579..8a5e1a5625 100644 --- a/org.adempiere.ui.zk/sessiontimeout.zul +++ b/org.adempiere.ui.zk/sessiontimeout.zul @@ -7,7 +7,6 @@ import org.compiere.util.Msg; import org.compiere.util.Env; import org.adempiere.webui.theme.ThemeManager; - var continueText = Msg.getMsg(Env.getCtx(),"continue"); self.setTitle(ThemeManager.getBrowserTitle()); ]]> @@ -16,7 +15,7 @@
- +