コード例 #1
0
 /**
  *  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);
 }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 /// <summary>
 /// Add Invoice Fact Line
 /// </summary>
 /// <param name="fact">fact line</param>
 public void AddInvoiceFact(MFactAcct fact)
 {
     _facts.Add(fact);
 }
コード例 #4
0
        }       //	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
コード例 #5
0
        }       //	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
コード例 #6
0
ファイル: FactLine.cs プロジェクト: vuongthai91/ERP-CMR-DMS
        /// <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);
        }