/** * Before Delete * @return true if acct was deleted */ protected override bool BeforeDelete() { if (IsPosted()) { if (!MPeriod.IsOpen(GetCtx(), GetDateTrx(), MDocBaseType.DOCBASETYPE_MATCHINVOICE)) { return(false); } SetPosted(false); return(MFactAcct.Delete(Table_ID, Get_ID(), Get_TrxName()) >= 0); } return(true); }
/// <summary> /// Create Accounting Entries /// </summary> /// <param name="as1">account schema</param> /// <param name="fact">fact to add lines</param> /// <param name="line">line</param> /// <returns>true if created</returns> public bool CreateEntries(MAcctSchema as1, Fact fact, DocLine line) { // get total index (the Receivables/Liabilities line) Decimal total = Env.ZERO; for (int i = 0; i < _facts.Count; i++) { MFactAcct factAcct = (MFactAcct)_facts[i]; if (factAcct.GetAmtSourceDr().CompareTo(total) > 0) { total = factAcct.GetAmtSourceDr(); _totalIndex = i; } if (factAcct.GetAmtSourceCr().CompareTo(total) > 0) { total = factAcct.GetAmtSourceCr(); _totalIndex = i; } } MFactAcct factAcct1 = (MFactAcct)_facts[_totalIndex]; log.Info("Total Invoice = " + total + " - " + factAcct1); int precision = as1.GetStdPrecision(); for (int i = 0; i < _facts.Count; i++) { // No Tax Line if (i == _totalIndex) { continue; } factAcct1 = (MFactAcct)_facts[i]; log.Info(i + ": " + factAcct1); // Create Tax Account MAccount taxAcct = factAcct1.GetMAccount(); if (taxAcct == null || taxAcct.Get_ID() == 0) { log.Severe("Tax Account not found/created"); return(false); } // Discount Amount if (Env.Signum(_DiscountAmt) != 0) { // Original Tax is DR - need to correct it CR if (Env.ZERO.CompareTo(factAcct1.GetAmtSourceDr()) != 0) { Decimal amount = CalcAmount(factAcct1.GetAmtSourceDr(), total, _DiscountAmt, precision); if (Env.Signum(amount) != 0) { fact.CreateLine(line, _DiscountAccount, as1.GetC_Currency_ID(), amount, null); fact.CreateLine(line, taxAcct, as1.GetC_Currency_ID(), null, amount); } } // Original Tax is CR - need to correct it DR else { Decimal amount = CalcAmount(factAcct1.GetAmtSourceCr(), total, _DiscountAmt, precision); if (Env.Signum(amount) != 0) { fact.CreateLine(line, taxAcct, as1.GetC_Currency_ID(), amount, null); fact.CreateLine(line, _DiscountAccount, as1.GetC_Currency_ID(), null, amount); } } } // Discount // WriteOff Amount if (Env.Signum(_WriteOffAmt) != 0) { // Original Tax is DR - need to correct it CR if (Env.ZERO.CompareTo(factAcct1.GetAmtSourceDr()) != 0) { Decimal amount = CalcAmount(factAcct1.GetAmtSourceDr(), total, _WriteOffAmt, precision); if (Env.Signum(amount) != 0) { fact.CreateLine(line, _WriteOffAccount, as1.GetC_Currency_ID(), amount, null); fact.CreateLine(line, taxAcct, as1.GetC_Currency_ID(), null, amount); } } // Original Tax is CR - need to correct it DR else { Decimal amount = CalcAmount(factAcct1.GetAmtSourceCr(), total, _WriteOffAmt, precision); if (Env.Signum(amount) != 0) { fact.CreateLine(line, taxAcct, as1.GetC_Currency_ID(), amount, null); fact.CreateLine(line, _WriteOffAccount, as1.GetC_Currency_ID(), null, amount); } } } // WriteOff } // for all lines return(true); }
/// <summary> /// Add Invoice Fact Line /// </summary> /// <param name="fact">fact line</param> public void AddInvoiceFact(MFactAcct fact) { _facts.Add(fact); }
} // doIt /// <summary> /// Create GL Journal /// </summary> /// <returns>document info</returns> private String CreateGLJournal() { List <X_T_InvoiceGL> list = new List <X_T_InvoiceGL>(); String sql = "SELECT * FROM T_InvoiceGL " + "WHERE AD_PInstance_ID=" + GetAD_PInstance_ID() + " ORDER BY AD_Org_ID"; IDataReader idr = null; try { idr = DataBase.DB.ExecuteReader(sql, null, Get_TrxName()); while (idr.Read()) { list.Add(new X_T_InvoiceGL(GetCtx(), idr, Get_TrxName())); } idr.Close(); } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, sql, e); } if (list.Count == 0) { return(" - No Records found"); } // MAcctSchema aas = MAcctSchema.Get(GetCtx(), _C_AcctSchema_ID); MAcctSchemaDefault asDefaultAccts = MAcctSchemaDefault.Get(GetCtx(), _C_AcctSchema_ID); MGLCategory cat = MGLCategory.GetDefaultSystem(GetCtx()); if (cat == null) { MDocType docType = MDocType.Get(GetCtx(), _C_DocTypeReval_ID); cat = MGLCategory.Get(GetCtx(), docType.GetGL_Category_ID()); } // MJournalBatch batch = new MJournalBatch(GetCtx(), 0, Get_TrxName()); batch.SetDescription(GetName()); batch.SetC_DocType_ID(_C_DocTypeReval_ID); batch.SetDateDoc(DateTime.Now);// new Timestamp(System.currentTimeMillis())); batch.SetDateAcct(_DateReval); batch.SetC_Currency_ID(aas.GetC_Currency_ID()); if (!batch.Save()) { return(GetRetrievedError(batch, "Could not create Batch")); //return " - Could not create Batch"; } // MJournal journal = null; Decimal? drTotal = Env.ZERO; Decimal? crTotal = Env.ZERO; int AD_Org_ID = 0; for (int i = 0; i < list.Count; i++) { X_T_InvoiceGL gl = list[i];//.get(i); if (Env.Signum(gl.GetAmtRevalDrDiff()) == 0 && Env.Signum(gl.GetAmtRevalCrDiff()) == 0) { continue; } MInvoice invoice = new MInvoice(GetCtx(), gl.GetC_Invoice_ID(), null); if (invoice.GetC_Currency_ID() == aas.GetC_Currency_ID()) { continue; } // if (journal == null) { journal = new MJournal(batch); journal.SetC_AcctSchema_ID(aas.GetC_AcctSchema_ID()); journal.SetC_Currency_ID(aas.GetC_Currency_ID()); journal.SetC_ConversionType_ID(_C_ConversionTypeReval_ID); MOrg org = MOrg.Get(GetCtx(), gl.GetAD_Org_ID()); journal.SetDescription(GetName() + " - " + org.GetName()); journal.SetGL_Category_ID(cat.GetGL_Category_ID()); if (!journal.Save()) { return(GetRetrievedError(journal, "Could not create Journal")); //return " - Could not create Journal"; } } // MJournalLine line = new MJournalLine(journal); line.SetLine((i + 1) * 10); line.SetDescription(invoice.GetSummary()); // MFactAcct fa = new MFactAcct(GetCtx(), gl.GetFact_Acct_ID(), null); line.SetC_ValidCombination_ID(MAccount.Get(fa)); Decimal?dr = gl.GetAmtRevalDrDiff(); Decimal?cr = gl.GetAmtRevalCrDiff(); drTotal = Decimal.Add(drTotal.Value, dr.Value); crTotal = Decimal.Add(crTotal.Value, cr.Value); line.SetAmtSourceDr(dr.Value); line.SetAmtAcctDr(dr.Value); line.SetAmtSourceCr(cr.Value); line.SetAmtAcctCr(cr.Value); line.Save(); // if (AD_Org_ID == 0) // invoice org id { AD_Org_ID = gl.GetAD_Org_ID(); } // Change in Org if (AD_Org_ID != gl.GetAD_Org_ID()) { CreateBalancing(asDefaultAccts, journal, drTotal.Value, crTotal.Value, AD_Org_ID, (i + 1) * 10); // AD_Org_ID = gl.GetAD_Org_ID(); drTotal = Env.ZERO; crTotal = Env.ZERO; journal = null; } } CreateBalancing(asDefaultAccts, journal, drTotal.Value, crTotal.Value, AD_Org_ID, (list.Count + 1) * 10); return(" - " + batch.GetDocumentNo() + " #" + list.Count); } // createGLJournal
} // doIt /// <summary> /// Create Data /// </summary> /// <param name="invoice">invoice</param> private void Create(MInvoice invoice) { /** Lines ** * MInvoiceLine[] lines = invoice.getLines(); * for (int i = 0; i < lines.length; i++) * { * MInvoiceLine line = lines[i]; * if (line.isDescription()) * continue; * // * MTaxDeclarationLine tdl = new MTaxDeclarationLine (_td, invoice, line); * tdl.setLine((_noLines+1) * 10); * if (tdl.save()) * _noLines++; * } * /** **/ /** Invoice Tax **/ MInvoiceTax[] taxes = invoice.GetTaxes(false); for (int i = 0; i < taxes.Length; i++) { MInvoiceTax tLine = taxes[i]; // MTaxDeclarationLine tdl = new MTaxDeclarationLine(_td, invoice, tLine); tdl.SetLine((_noLines + 1) * 10); if (tdl.Save()) { _noLines++; } } /** **/ /** Acct **/ String sql = "SELECT * FROM Fact_Acct WHERE AD_Table_ID=@Param1 AND Record_ID=@Param2"; SqlParameter[] Param = new SqlParameter[2]; IDataReader idr = null; DataTable dt = null; //PreparedStatement pstmt = null; try { //pstmt = DataBase.prepareStatement (sql, null); //pstmt.setInt (1, MInvoice.Table_ID); Param[0] = new SqlParameter("@Param1", MInvoice.Table_ID); //pstmt.setInt (2, invoice.getC_Invoice_ID()); Param[1] = new SqlParameter("@Param2", invoice.GetC_Invoice_ID()); //ResultSet rs = pstmt.executeQuery (); idr = DataBase.DB.ExecuteReader(sql, Param, null); dt = new DataTable(); dt.Load(idr); idr.Close(); //while (rs.next ()) foreach (DataRow dr in dt.Rows) { MFactAcct fact = new MFactAcct(GetCtx(), dr, null); // no lock MTaxDeclarationAcct tda = new MTaxDeclarationAcct(_td, fact); tda.SetLine((_noAccts + 1) * 10); if (tda.Save()) { _noAccts++; } } } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, sql, e); } finally { if (idr != null) { idr.Close(); } dt = null; } /** **/ } // invoice
/// <summary> /// Update Line with reversed Original Amount in Accounting Currency. /// Also copies original dimensions like Project, etc. /// Called from Doc_MatchInv /// </summary> /// <param name="AD_Table_ID"></param> /// <param name="Record_ID"></param> /// <param name="Line_ID"></param> /// <param name="multiplier">targetQty/documentQty</param> /// <returns>true if success</returns> public bool UpdateReverseLine(int AD_Table_ID, int Record_ID, int Line_ID, Decimal multiplier) { bool success = false; String sql = "SELECT * " + "FROM Fact_Acct " + "WHERE C_AcctSchema_ID=" + GetC_AcctSchema_ID() + " AND AD_Table_ID=" + AD_Table_ID + " AND Record_ID=" + Record_ID + " AND Line_ID=" + Line_ID + " AND Account_ID=" + _acct.GetAccount_ID(); IDataReader idr = null; try { idr = DataBase.DB.ExecuteReader(sql, null, Get_TrxName()); //pstmt.setInt(1, GetC_AcctSchema_ID()); //pstmt.setInt(2, AD_Table_ID); //pstmt.setInt(3, Record_ID); //pstmt.setInt(4, Line_ID); //pstmt.setInt(5, _acct.GetAccount_ID()); if (idr.Read()) { MFactAcct fact = new MFactAcct(GetCtx(), idr, Get_TrxName()); // Accounted Amounts - reverse Decimal dr = fact.GetAmtAcctDr(); Decimal cr = fact.GetAmtAcctCr(); SetAmtAcctDr(Decimal.Multiply(cr, multiplier)); SetAmtAcctCr(Decimal.Multiply(dr, multiplier)); // Source Amounts SetAmtSourceDr(GetAmtAcctDr()); SetAmtSourceCr(GetAmtAcctCr()); // success = true; log.Fine(new StringBuilder("(Table=").Append(AD_Table_ID) .Append(",Record_ID=").Append(Record_ID) .Append(",Line=").Append(Record_ID) .Append(", Account=").Append(_acct) .Append(",dr=").Append(dr).Append(",cr=").Append(cr) .Append(") - DR=").Append(GetAmtSourceDr()).Append("|").Append(GetAmtAcctDr()) .Append(", CR=").Append(GetAmtSourceCr()).Append("|").Append(GetAmtAcctCr()) .ToString()); // Dimensions SetAD_OrgTrx_ID(fact.GetAD_OrgTrx_ID()); SetC_Project_ID(fact.GetC_Project_ID()); SetC_Activity_ID(fact.GetC_Activity_ID()); SetC_Campaign_ID(fact.GetC_Campaign_ID()); SetC_SalesRegion_ID(fact.GetC_SalesRegion_ID()); SetC_LocFrom_ID(fact.GetC_LocFrom_ID()); SetC_LocTo_ID(fact.GetC_LocTo_ID()); SetM_Product_ID(fact.GetM_Product_ID()); SetM_Locator_ID(fact.GetM_Locator_ID()); SetUser1_ID(fact.GetUser1_ID()); SetUser2_ID(fact.GetUser2_ID()); SetC_UOM_ID(fact.GetC_UOM_ID()); SetC_Tax_ID(fact.GetC_Tax_ID()); // Org for cross charge SetAD_Org_ID(fact.GetAD_Org_ID()); } else { log.Warning(new StringBuilder("Not Found (try later) ") .Append(",C_AcctSchema_ID=").Append(GetC_AcctSchema_ID()) .Append(", AD_Table_ID=").Append(AD_Table_ID) .Append(",Record_ID=").Append(Record_ID) .Append(",Line_ID=").Append(Line_ID) .Append(", Account_ID=").Append(_acct.GetAccount_ID()).ToString()); } idr.Close(); } catch (Exception e) { if (idr != null) { idr.Close(); idr = null; } log.Log(Level.SEVERE, sql, e); } return(success); }