/// <summary> /// Create new Charge based on the parameters passed /// </summary> /// <param name="ctx"></param> /// <param name="m_C_AcctSchema_ID"></param> /// <param name="m_C_TaxCategory_ID"></param> /// <param name="name"></param> /// <param name="primaryC_ElementValue_ID"></param> /// <param name="expense"></param> /// <returns></returns> public int CreateCharge(Ctx ctx, int m_C_AcctSchema_ID, int m_C_TaxCategory_ID, String name, int primaryC_ElementValue_ID, Boolean expense) { MCharge charge = new MCharge(ctx, 0, null); charge.SetName(name); charge.SetC_TaxCategory_ID(m_C_TaxCategory_ID); if (!charge.Save()) { // log.Log(Level.SEVERE, name + " not created"); Msg = name + " not created"; ID = 0; return(0); } MAcctSchema m_acctSchema = null; // Get Primary AcctSchama if (m_acctSchema == null) { m_acctSchema = new MAcctSchema(ctx, m_C_AcctSchema_ID, null); } if (m_acctSchema == null || m_acctSchema.GetC_AcctSchema_ID() == 0) { ID = 0; return(0); } MAcctSchemaElement primary_ase = m_acctSchema.GetAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_Account); // Get All MAcctSchema[] ass = MAcctSchema.GetClientAcctSchema(ctx, charge.GetAD_Client_ID()); foreach (MAcctSchema ac in ass) { // Target Account MAccount defaultAcct = MAccount.GetDefault(ac, true); // optional null // Natural Account int C_ElementValue_ID = primaryC_ElementValue_ID; MAcctSchemaElement ase = ac.GetAcctSchemaElement(X_C_AcctSchema_Element.ELEMENTTYPE_Account); if (primary_ase.GetC_Element_ID() != ase.GetC_Element_ID()) { MAcctSchemaDefault defAccts = MAcctSchemaDefault.Get(ctx, ac.GetC_AcctSchema_ID()); int C_ValidCombination_ID = defAccts.GetCh_Expense_Acct(); if (!expense) { C_ValidCombination_ID = defAccts.GetCh_Revenue_Acct(); } MAccount chargeAcct = MAccount.Get(ctx, C_ValidCombination_ID); C_ElementValue_ID = chargeAcct.GetAccount_ID(); // Fallback if (C_ElementValue_ID == 0) { C_ElementValue_ID = defaultAcct.GetAccount_ID(); if (C_ElementValue_ID == 0) { C_ElementValue_ID = ase.GetC_ElementValue_ID(); } if (C_ElementValue_ID == 0) { // log.Log(Level.WARNING, "No Default ElementValue for " + ac); Msg = "No Default ElementValue for " + ac; continue; } } } MAccount acct = MAccount.Get(ctx, charge.GetAD_Client_ID(), charge.GetAD_Org_ID(), ac.GetC_AcctSchema_ID(), C_ElementValue_ID, defaultAcct.GetC_SubAcct_ID(), defaultAcct.GetM_Product_ID(), defaultAcct.GetC_BPartner_ID(), defaultAcct.GetAD_OrgTrx_ID(), defaultAcct.GetC_LocFrom_ID(), defaultAcct.GetC_LocTo_ID(), defaultAcct.GetC_SalesRegion_ID(), defaultAcct.GetC_Project_ID(), defaultAcct.GetC_Campaign_ID(), defaultAcct.GetC_Activity_ID(), defaultAcct.GetUser1_ID(), defaultAcct.GetUser2_ID(), defaultAcct.GetUserElement1_ID(), defaultAcct.GetUserElement2_ID()); if (acct == null) { //log.Log(Level.WARNING, "No Default Account for " + ac); Msg = "No Default Account for " + ac; continue; } // Update Accounts StringBuilder sql = new StringBuilder("UPDATE C_Charge_Acct "); sql.Append("SET CH_Expense_Acct=").Append(acct.GetC_ValidCombination_ID()); sql.Append(", CH_Revenue_Acct=").Append(acct.GetC_ValidCombination_ID()); sql.Append(" WHERE C_Charge_ID=").Append(charge.GetC_Charge_ID()); sql.Append(" AND C_AcctSchema_ID=").Append(ac.GetC_AcctSchema_ID()); // int no = VAdvantage.DataBase.DB.ExecuteQuery(sql.ToString(), null, null); if (no != 1) { //log.Log(Level.WARNING, "Update #" + no + "\n" + sql.ToString()); Msg = "Update #" + no + "\n" + sql.ToString(); } } ID = charge.GetC_Charge_ID(); return(charge.GetC_Charge_ID()); }