/// <summary> /// Get Tax ID (Detail). /// If error return 0 and set error log (TaxNotFound) /// </summary> /// <param name="ctx">context</param> /// <param name="C_TaxCategory_ID">tax category</param> /// <param name="IsSOTrx">Sales Order Trx</param> /// <param name="shipDate">ship date (ignored)</param> /// <param name="shipFromC_Locction_ID">ship from (ignored)</param> /// <param name="shipToC_Location_ID">ship to (ignored)</param> /// <param name="billDate">invoice date</param> /// <param name="billFromC_Location_ID">invoice from</param> /// <param name="billToC_Location_ID">invoice to</param> /// <returns>C_Tax_ID</returns> protected static int Get(Ctx ctx, int C_TaxCategory_ID, bool IsSOTrx, DateTime?shipDate, int shipFromC_Locction_ID, int shipToC_Location_ID, DateTime?billDate, int billFromC_Location_ID, int billToC_Location_ID) { // C_TaxCategory contains CommodityCode // API to Tax Vendor comes here //if (CLogMgt.IsLevelFinest()) { log.Info("(Detail) - Category=" + C_TaxCategory_ID + ", SOTrx=" + IsSOTrx); log.Config("(Detail) - BillFrom=" + billFromC_Location_ID + ", BillTo=" + billToC_Location_ID + ", BillDate=" + billDate); } MTax[] taxes = MTax.GetAll(ctx); MLocation lFrom = new MLocation(ctx, billFromC_Location_ID, null); MLocation lTo = new MLocation(ctx, billToC_Location_ID, null); log.Finer("From=" + lFrom); log.Finer("To=" + lTo); List <MTax> results = new List <MTax>(); for (int i = 0; i < taxes.Length; i++) { MTax tax = taxes[i]; if (tax.IsTaxExempt() || !tax.IsActive() || tax.GetC_TaxCategory_ID() != C_TaxCategory_ID || tax.GetParent_Tax_ID() != 0) // user parent tax { continue; } if (IsSOTrx && MTax.SOPOTYPE_PurchaseTax.Equals(tax.GetSOPOType())) { continue; } if (!IsSOTrx && MTax.SOPOTYPE_SalesTax.Equals(tax.GetSOPOType())) { continue; } // if (CLogMgt.IsLevelFinest()) { log.Finest(tax.ToString()); log.Finest("From Country - " + (tax.GetC_Country_ID() == lFrom.GetC_Country_ID() || tax.GetC_Country_ID() == 0)); log.Finest("From Region - " + (tax.GetC_Region_ID() == lFrom.GetC_Region_ID() || tax.GetC_Region_ID() == 0)); log.Finest("To Country - " + (tax.GetTo_Country_ID() == lTo.GetC_Country_ID() || tax.GetTo_Country_ID() == 0)); log.Finest("To Region - " + (tax.GetTo_Region_ID() == lTo.GetC_Region_ID() || tax.GetTo_Region_ID() == 0)); //log.Finest("Date valid - " + (!tax.GetValidFrom().after(billDate))); log.Finest("Date valid - " + (!(tax.GetValidFrom() > (billDate)))); } // From Country if ((tax.GetC_Country_ID() == lFrom.GetC_Country_ID() || tax.GetC_Country_ID() == 0) // From Region && (tax.GetC_Region_ID() == lFrom.GetC_Region_ID() || tax.GetC_Region_ID() == 0) // To Country && (tax.GetTo_Country_ID() == lTo.GetC_Country_ID() || tax.GetTo_Country_ID() == 0) // To Region && (tax.GetTo_Region_ID() == lTo.GetC_Region_ID() || tax.GetTo_Region_ID() == 0) // Date //&& !tax.GetValidFrom().after(billDate) && tax.GetValidFrom() > (billDate) ) { if (!tax.IsPostal()) { results.Add(tax); continue; } // MTaxPostal[] postals = tax.GetPostals(false); for (int j = 0; j < postals.Length; j++) { MTaxPostal postal = postals[j]; if (postal.IsActive() // Postal From is mandatory && postal.GetPostal().StartsWith(lFrom.GetPostal()) // Postal To is optional && (postal.GetPostal_To() == null || postal.GetPostal_To().StartsWith(lTo.GetPostal())) ) { results.Add(tax); continue; } } // for all postals } } // for all taxes // One Result if (results.Count == 1) { return(results[0].GetC_Tax_ID()); } // Multiple results - different valid from dates if (results.Count > 1) { MTax latest = null; for (int i = 0; i < results.Count; i++) { MTax tax = results[i]; if (latest == null //|| tax.GetValidFrom().after(latest.GetValidFrom())) || tax.GetValidFrom() > (latest.GetValidFrom())) { latest = tax; } } return(latest.GetC_Tax_ID()); } // Default Tax for (int i = 0; i < taxes.Length; i++) { MTax tax = taxes[i]; if (!tax.IsDefault() || !tax.IsActive() || tax.GetParent_Tax_ID() != 0) // user parent tax { continue; } if (IsSOTrx && MTax.SOPOTYPE_PurchaseTax.Equals(tax.GetSOPOType())) { continue; } if (!IsSOTrx && MTax.SOPOTYPE_SalesTax.Equals(tax.GetSOPOType())) { continue; } log.Fine("(default) - " + tax); return(tax.GetC_Tax_ID()); } // for all taxes log.SaveError("TaxNotFound", ""); return(0); }