/// <summary> /// Calculate/Set Surcharge Tax Amt from Invoice Lines /// </summary> /// <returns>true if calculated</returns> public bool CalculateSurchargeFromLines() { Decimal taxBaseAmt = Env.ZERO; Decimal surTaxAmt = Env.ZERO; // MTax surTax = new MTax(GetCtx(), GetC_Tax_ID(), Get_TrxName()); bool documentLevel = surTax.IsDocumentLevel(); // String sql = "SELECT il.TaxBaseAmt, COALESCE(il.TaxAmt,0), i.IsSOTrx , i.C_Currency_ID , i.DateAcct , i.C_ConversionType_ID, tax.SurchargeType " + "FROM C_InvoiceLine il" + " INNER JOIN C_Invoice i ON (il.C_Invoice_ID=i.C_Invoice_ID) " + " INNER JOIN C_Tax tax ON il.C_Tax_ID=tax.C_Tax_ID " + "WHERE il.C_Invoice_ID=" + GetC_Invoice_ID() + " AND tax.Surcharge_Tax_ID=" + GetC_Tax_ID(); IDataReader idr = null; int c_Currency_ID = 0; DateTime? dateAcct = null; int c_ConversionType_ID = 0; try { idr = DataBase.DB.ExecuteReader(sql, null, Get_TrxName()); while (idr.Read()) { //Get References from invoiice header c_Currency_ID = Utility.Util.GetValueOfInt(idr[3]); dateAcct = Utility.Util.GetValueOfDateTime(idr[4]); c_ConversionType_ID = Utility.Util.GetValueOfInt(idr[5]); // BaseAmt Decimal baseAmt = Utility.Util.GetValueOfDecimal(idr[0]); // TaxAmt Decimal taxAmt = Utility.Util.GetValueOfDecimal(idr[1]); string surchargeType = Util.GetValueOfString(idr[6]); // for Surcharge Calculation type - Line Amount + Tax Amount if (surchargeType.Equals(MTax.SURCHARGETYPE_LineAmountPlusTax)) { baseAmt = Decimal.Add(baseAmt, taxAmt); taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } // for Surcharge Calculation type - Line Amount else if (surchargeType.Equals(MTax.SURCHARGETYPE_LineAmount)) { taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } // for Surcharge Calculation type - Tax Amount else { baseAmt = taxAmt; taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } taxAmt = Env.ZERO; bool isSOTrx = "Y".Equals(idr[2].ToString()); // if (documentLevel || Env.Signum(baseAmt) == 0) { } else if (Env.Signum(taxAmt) != 0 && !isSOTrx) // manually entered { ; } else // calculate line tax { taxAmt = surTax.CalculateTax(baseAmt, false, GetPrecision()); } // surTaxAmt = Decimal.Add(surTaxAmt, taxAmt); } idr.Close(); } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, "setTaxBaseAmt", e); taxBaseAmt = Util.GetValueOfDecimal(null); } // Calculate Tax if (documentLevel || Env.Signum(surTaxAmt) == 0) { surTaxAmt = surTax.CalculateTax(taxBaseAmt, false, GetPrecision()); } SetTaxAmt(surTaxAmt); // set Tax Amount in base currency if (Get_ColumnIndex("TaxBaseCurrencyAmt") >= 0) { decimal taxAmtBaseCurrency = GetTaxAmt(); int primaryAcctSchemaCurrency = GetCtx().GetContextAsInt("$C_Currency_ID"); if (c_Currency_ID != primaryAcctSchemaCurrency) { taxAmtBaseCurrency = MConversionRate.Convert(GetCtx(), GetTaxAmt(), primaryAcctSchemaCurrency, c_Currency_ID, dateAcct, c_ConversionType_ID, GetAD_Client_ID(), GetAD_Org_ID()); } SetTaxBaseCurrencyAmt(taxAmtBaseCurrency); } // Set Base SetTaxBaseAmt(taxBaseAmt); return(true); }
/// <summary> /// Calculate/Set Surcharge Tax Amt from Order Lines /// </summary> /// <returns>true if calculated</returns> public bool CalculateSurchargeFromLines() { Decimal taxBaseAmt = Env.ZERO; Decimal surTaxAmt = Env.ZERO; // MTax surTax = new MTax(GetCtx(), GetC_Tax_ID(), Get_TrxName()); bool documentLevel = surTax.IsDocumentLevel(); // String sql = "SELECT ol.TaxAbleAmt, ol.TaxAmt, tax.SurchargeType FROM C_OrderLine ol" + " INNER JOIN C_Tax tax ON ol.C_Tax_ID=tax.C_Tax_ID WHERE ol.C_Order_ID=" + GetC_Order_ID() + " AND tax.Surcharge_Tax_ID=" + GetC_Tax_ID(); IDataReader idr = null; try { idr = DataBase.DB.ExecuteReader(sql, null, Get_TrxName()); while (idr.Read()) { Decimal baseAmt = Util.GetValueOfDecimal(idr[0]); Decimal taxAmt = Util.GetValueOfDecimal(idr[1]); string surchargeType = Util.GetValueOfString(idr[2]); // for Surcharge Calculation type - Line Amount + Tax Amount if (surchargeType.Equals(MTax.SURCHARGETYPE_LineAmountPlusTax)) { baseAmt = Decimal.Add(baseAmt, taxAmt); taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } // for Surcharge Calculation type - Line Amount else if (surchargeType.Equals(MTax.SURCHARGETYPE_LineAmount)) { taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } // for Surcharge Calculation type - Tax Amount else { baseAmt = taxAmt; taxBaseAmt = Decimal.Add(taxBaseAmt, baseAmt); } // if (!documentLevel) // calculate Surcharge tax { surTaxAmt = Decimal.Add(surTaxAmt, surTax.CalculateTax(baseAmt, false, GetPrecision())); } } idr.Close(); } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, "CalculateSurchargeFromLines", e); taxBaseAmt = Utility.Util.GetValueOfDecimal(null); } // Calculate Tax if (documentLevel) // document level { surTaxAmt = surTax.CalculateTax(taxBaseAmt, false, GetPrecision()); } SetTaxAmt(surTaxAmt); SetTaxBaseAmt(taxBaseAmt); return(true); }