private InvoiceItem CreateInvoiceItem(Setting objSetting, Foodics.NetSuite.Shared.Model.InvoiceItem itemDetails) { RecordRef taxCode, item, unit, price; InvoiceItem invoiceItemObject = new InvoiceItem(); taxCode = new RecordRef(); float taxRate = 1 + (objSetting.TaxRate / 100); if (objSetting.TaxAlwaysAppliedInItems) { taxCode.internalId = objSetting.TaxCode_Netsuite_Id.ToString(); invoiceItemObject.rate = Convert.ToString(itemDetails.Amount / taxRate); } else { //if (itemDetails.FoodicsTax > 0 && itemDetails.Item_Type != nameof(Item_Type.OtherChargeSaleItem)) //if (itemDetails.FoodicsTax > 0 || itemDetails.Item_Type == nameof(Item_Type.OtherChargeSaleItem)) //{ taxCode.internalId = objSetting.TaxCode_Netsuite_Id.ToString(); if (objSetting.ItemTaxInclusive)//= tax inclusive in item price { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount / taxRate); } else { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount); } //} //else //{ // taxCode.internalId = objSetting.TaxCode_Free_Netsuite_Id.ToString(); // invoiceItemObject.rate = Convert.ToString(itemDetails.Amount); //} } taxCode.type = RecordType.taxAcct; if (int.Parse(taxCode.internalId) > 0) { invoiceItemObject.taxCode = taxCode; } // item item = new RecordRef(); item.internalId = itemDetails.Item_Id.ToString(); item.type = (RecordType)Enum.Parse(typeof(RecordType), itemDetails.Item_Type, true); invoiceItemObject.item = item; if (Utility.ConvertToInt(itemDetails.Units) > 0) { unit = new RecordRef(); unit.internalId = itemDetails.Units.ToString(); unit.type = RecordType.unitsType; invoiceItemObject.units = unit; } // price level #region price level price = new RecordRef(); price.type = RecordType.priceLevel; price.internalId = "-1"; invoiceItemObject.price = price; #endregion invoiceItemObject.quantitySpecified = true; invoiceItemObject.quantity = itemDetails.Quantity; if (!string.IsNullOrEmpty(itemDetails.Combo_Name)) { StringCustomFieldRef ComboRef = new StringCustomFieldRef(); ComboRef.scriptId = "custcol_da_foodics_combos"; ComboRef.value = itemDetails.Combo_Name.ToString() + " - " + itemDetails.ComboSize_Name.ToString(); CustomFieldRef[] customFieldRefArray = new CustomFieldRef[1]; customFieldRefArray[0] = ComboRef; invoiceItemObject.customFieldList = customFieldRefArray; } return(invoiceItemObject); }
private WriteResponseList CreateCreditMemo(List <Foodics.NetSuite.Shared.Model.Invoice> returnList) { //Define Array of credit Memo Then Loop CreditMemo[] memoList = new CreditMemo[returnList.Count]; CreditMemoItem[] memoitemarr; CreditMemoItem invoiceItemObject; //add return id + return netsuite id to credit memo table, credit memo netsuite id #region Add Credit Memoes to CreditMemo Array for (int i = 0; i < returnList.Count; i++) { Foodics.NetSuite.Shared.Model.Invoice invoiceReturn = returnList[i]; Foodics.NetSuite.Shared.Model.Invoice invoiceoriginal = new GenericeDAO <Foodics.NetSuite.Shared.Model.Invoice>().GetWhere(" Foodics_Id = '" + invoiceReturn.Original_Foodics_Id + "'").FirstOrDefault(); if (invoiceoriginal != null && invoiceoriginal.Netsuite_Id > 0) { Setting objSetting = new GenericeDAO <Setting>().GetWhere("Subsidiary_Netsuite_Id=" + invoiceReturn.Subsidiary_Id).FirstOrDefault(); StringCustomFieldRef FoodicsRef, FoodicsNumb, orderDiscount; CustomFieldRef[] customFieldRefArray; CreditMemo memo = new CreditMemo(); // Return RecordRef returnRef = new RecordRef(); returnRef.internalId = invoiceoriginal.Netsuite_Id.ToString(); returnRef.type = RecordType.invoice; memo.createdFrom = returnRef; //Customer RecordRef entity = new RecordRef(); entity.internalId = invoiceReturn.Customer_Netsuite_Id > 0 ? invoiceReturn.Customer_Netsuite_Id.ToString() : objSetting.Customer_Netsuite_Id.ToString(); entity.type = RecordType.customer; memo.entity = entity; //currency RecordRef currency = new RecordRef(); currency.internalId = objSetting.Currency_Netsuite_Id.ToString(); currency.type = RecordType.currency; memo.currency = currency; //date memo.tranDateSpecified = true; memo.tranDate = TimeZoneInfo.ConvertTimeToUtc(invoiceReturn.Date, TimeZoneInfo.Local); //exchange rate memo.exchangeRate = invoiceReturn.Exchange_Rate; //subsidary RecordRef subsid = new RecordRef(); subsid.internalId = invoiceReturn.Subsidiary_Id.ToString(); subsid.type = RecordType.subsidiary; memo.subsidiary = subsid; #region Item List List <Foodics.NetSuite.Shared.Model.InvoiceItem> itemLst = new GenericeDAO <Foodics.NetSuite.Shared.Model.InvoiceItem>().GetWhere(" ProductStatus =6 and Invoice_Id =" + invoiceReturn.Id + " and isnull(Item_Id,0) >0 "); int DiscountItems = itemLst.Where(x => x.Line_Discount_Amount > 0).Count(); //Define Invoice Items List int totalItems = itemLst.Count + DiscountItems; memoitemarr = new CreditMemoItem[totalItems]; if (itemLst.Count > 0) { CreditMemoItemList crdtmemoitmlst = new CreditMemoItemList(); try { int arr = 0; for (int k = 0; k < totalItems; k++) { Foodics.NetSuite.Shared.Model.InvoiceItem itemDetails = itemLst[arr]; invoiceItemObject = CreateCreditItem(objSetting, itemDetails); memoitemarr[k] = invoiceItemObject; if (itemDetails.Line_Discount_Amount > 0) { float Discount = itemDetails.Line_Discount_Amount; k++; Foodics.NetSuite.Shared.Model.InvoiceItem OtherCharge = new Foodics.NetSuite.Shared.Model.InvoiceItem(); OtherCharge.Item_Id = objSetting.OtherChargeItem_Netsuite_Id; OtherCharge.Amount = Discount * -1; OtherCharge.Quantity = 1; OtherCharge.Item_Type = "OtherChargeResaleItem"; invoiceItemObject = CreateCreditItem(objSetting, OtherCharge); memoitemarr[k] = invoiceItemObject; } arr++; } } catch (Exception ex) { LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } crdtmemoitmlst.item = memoitemarr; memo.itemList = crdtmemoitmlst; } #endregion #region Discount if (invoiceReturn.Total_Discount > 0) { RecordRef discountitem = new RecordRef(); discountitem.type = RecordType.discountItem; memo.discountItem = discountitem; memo.discountRate = (Math.Round((invoiceReturn.Total_Discount / 1.15), 3) * -1).ToString(); if (invoiceReturn.Discount_Id > 0) { discountitem.internalId = invoiceReturn.Discount_Id.ToString(); } else { discountitem.internalId = objSetting.DiscountItem_Netsuite_Id.ToString(); } } else { memo.discountRate = "0"; } if (invoiceReturn.Accounting_Discount_Item != 0) { RecordRef discItem = new RecordRef(); discItem.internalId = invoiceReturn.Accounting_Discount_Item.ToString(); discItem.type = RecordType.discountItem; memo.discountItem = discItem; } #region Custom Attributes orderDiscount = new StringCustomFieldRef(); orderDiscount.scriptId = "custbody_da_invoice_discount"; orderDiscount.value = invoiceReturn.Total_Discount.ToString(); FoodicsRef = new StringCustomFieldRef(); FoodicsRef.scriptId = "custbody_da_foodics_reference"; FoodicsRef.value = invoiceReturn.BarCode.ToString(); FoodicsNumb = new StringCustomFieldRef(); FoodicsNumb.scriptId = "custbody_da_foodics_number"; FoodicsNumb.value = invoiceReturn.Number.ToString(); customFieldRefArray = new CustomFieldRef[3]; customFieldRefArray[0] = orderDiscount; customFieldRefArray[1] = FoodicsRef; customFieldRefArray[2] = FoodicsNumb; memo.customFieldList = customFieldRefArray; #endregion #endregion memoList[i] = memo; } } //Post Memos to Netsuite WriteResponseList memoWR = Service(true).addList(memoList); bool receiptresult = memoWR.status.isSuccess; if (receiptresult) { UpdatedInvoice(returnList, memoWR); } #endregion return(memoWR); }
public override Int64 Set(string parametersArr) { try { bool result = true; new CustomDAO().InvoiceRelatedUpdate(); new CustomDAO().SetItemClass(); #region Check Correct Invoices /* * SELECT * * FROM Invoice * WHERE * --(Location_Id = 201) and * Order_Status=4 * and Net_Payable + Total_Discount != (select sum( Quantity * amount) - sum(Line_Discount_Amount) from InvoiceItem where InvoiceItem.Invoice_Id =Invoice.Id and ISNULL(Item_Id,0)>0 and ProductStatus=3 ) * * SELECT * * FROM Invoice * WHERE * * Order_Status=5 * and Net_Payable + Total_Discount != (select sum( Quantity * amount) - sum(Line_Discount_Amount) from InvoiceItem where InvoiceItem.Invoice_Id =Invoice.Id and ISNULL(Item_Id,0)>0 and ProductStatus=6 ) * select * from InvoiceItem where isnull([Item_Id], 0)=0 * * Declare @id nvarchar(50) * set @id='007f91e2-a8ad-4dab-a20a-70c90e8db6ce' * select * from Invoice * where Foodics_Id =@id * select Net_Payable,Net_Payable-((Net_Payable*15)/100) from Invoice * where Foodics_Id =@id * select * from InvoiceItem * where Foodics_Id =@id */ #endregion List <Foodics.NetSuite.Shared.Model.Invoice> lstitemsAll = new CustomDAO().SelectInvoice(4); int Exe_length = 200; int lstend = Exe_length; if (lstitemsAll.Count > 0) { for (int Index = 0; Index < lstitemsAll.Count; Index += Exe_length) { if (Index + Exe_length >= lstitemsAll.Count) { lstend = lstitemsAll.Count - Index; } List <Foodics.NetSuite.Shared.Model.Invoice> invoiceLst = lstitemsAll.GetRange(Index, lstend); if (invoiceLst.Count > 0) { #region variables Invoice[] InvoiceArr = new Invoice[invoiceLst.Count]; Foodics.NetSuite.Shared.Model.Invoice invoice_info; Foodics.NetSuite.Shared.Model.InvoiceItem itemDetails; DateTime invoice_date; Invoice invoiceObject; InvoiceItem invoiceItemObject; InvoiceItemList items; RecordRef subsid, currency, entity, location; StringCustomFieldRef FoodicsRef, FoodicsNumb, CreatedBy, Source, orderDiscount; CustomFieldRef[] customFieldRefArray; #endregion for (int i = 0; i < invoiceLst.Count; i++) { try { List <Foodics.NetSuite.Shared.Model.InvoiceItem> itemLst = new List <Foodics.NetSuite.Shared.Model.InvoiceItem>(); List <InvoiceItem> invoiceItems = new List <InvoiceItem>(); invoice_info = invoiceLst[i]; Setting objSetting = new GenericeDAO <Setting>().GetWhere("Subsidiary_Netsuite_Id=" + invoice_info.Subsidiary_Id).FirstOrDefault(); invoiceObject = new Invoice(); #region invoice items itemLst = new GenericeDAO <Foodics.NetSuite.Shared.Model.InvoiceItem>().GetWhere(" ProductStatus =3 and Invoice_Id =" + invoice_info.Id + " and isnull(Item_Id,0) >0 "); try { for (int k = 0; k < itemLst.Count; k++) { itemDetails = itemLst[k]; invoiceItemObject = CreateInvoiceItem(objSetting, itemDetails); invoiceItems.Add(invoiceItemObject); if (itemDetails.Line_Discount_Amount > 0) { float Discount = itemDetails.Line_Discount_Amount; Foodics.NetSuite.Shared.Model.InvoiceItem OtherCharge = new Foodics.NetSuite.Shared.Model.InvoiceItem(); OtherCharge.Item_Id = objSetting.OtherChargeItem_Netsuite_Id; OtherCharge.Amount = Discount * -1; OtherCharge.Quantity = 1; OtherCharge.Item_Type = nameof(Item_Type.OtherChargeSaleItem); invoiceItemObject = CreateInvoiceItem(objSetting, OtherCharge); invoiceItems.Add(invoiceItemObject); } } //if (invoice_info.Total_Discount > 0) //{ // float Discount = invoice_info.Total_Discount; // Foodics.NetSuite.Shared.Model.InvoiceItem discountItem = new Foodics.NetSuite.Shared.Model.InvoiceItem(); // if (invoice_info.Discount_Id > 0) // discountItem.Item_Id = invoice_info.Discount_Id; // else // discountItem.Item_Id = objSetting.DiscountItem_Netsuite_Id; // discountItem.Amount = Discount * -1; // //discountItem.Quantity = 1; // discountItem.Item_Type = nameof(Item_Type.DiscountItem); // invoiceItemObject = CreateInvoiceItem(objSetting, discountItem); // invoiceItems.Add(invoiceItemObject); //} } catch (Exception ex) { LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } //Assign invoive items items = new InvoiceItemList(); items.item = invoiceItems.ToArray(); invoiceObject.itemList = items; //GiftCertRedemption #endregion #region Standard Attributes invoice_date = TimeZoneInfo.ConvertTimeToUtc(invoice_info.Date, TimeZoneInfo.Local); //invoiceObject.externalId = invoice_info.BarCode; invoiceObject.tranDateSpecified = true; invoiceObject.dueDateSpecified = true; invoiceObject.tranDate = invoice_date; invoiceObject.dueDate = invoice_date; invoiceObject.exchangeRate = invoice_info.Exchange_Rate; //invoiceObject.memo = invoice_info.Notes; if (invoice_info.Subsidiary_Id > 0) { subsid = new RecordRef(); subsid.internalId = objSetting.Subsidiary_Netsuite_Id.ToString(); subsid.type = RecordType.subsidiary; invoiceObject.subsidiary = subsid; } currency = new RecordRef(); currency.internalId = objSetting.Currency_Netsuite_Id.ToString(); currency.type = RecordType.currency; invoiceObject.currency = currency; entity = new RecordRef(); entity.internalId = invoice_info.Customer_Netsuite_Id > 0 ? invoice_info.Customer_Netsuite_Id.ToString() : objSetting.Customer_Netsuite_Id.ToString(); entity.type = RecordType.customer; invoiceObject.entity = entity; location = new RecordRef(); location.internalId = invoice_info.Location_Id.ToString(); //objSetting.Location_Netsuite_Id.ToString(); location.type = RecordType.location; invoiceObject.location = location; if (invoice_info.Sales_Rep_Id > 0) { RecordRef sales_rep = new RecordRef(); sales_rep.internalId = invoice_info.Sales_Rep_Id.ToString(); sales_rep.type = RecordType.employee; invoiceObject.salesRep = sales_rep; } #endregion #region Discount if (invoice_info.Total_Discount > 0) { RecordRef discountitem = new RecordRef(); discountitem.type = RecordType.discountItem; invoiceObject.discountItem = discountitem; float taxRate = 1 + (objSetting.TaxRate / 100); if (objSetting.TaxAlwaysAppliedInItems) { invoiceObject.discountRate = (Math.Round((invoice_info.Total_Discount / taxRate), 3) * -1).ToString(); } else { //if (objSetting.ItemTaxInclusive) // invoiceObject.discountRate = (Math.Round((invoice_info.Total_Discount / taxRate), 3) * -1).ToString(); //else invoiceObject.discountRate = (Math.Round(invoice_info.Total_Discount, 3) * -1).ToString(); } if (invoice_info.Discount_Id > 0) { discountitem.internalId = invoice_info.Discount_Id.ToString(); } else { discountitem.internalId = objSetting.DiscountItem_Netsuite_Id.ToString(); } } else { invoiceObject.discountRate = "0"; } orderDiscount = new StringCustomFieldRef(); orderDiscount.scriptId = "custbody_da_invoice_discount"; orderDiscount.value = invoice_info.Total_Discount.ToString(); //if (invoice_info.Accounting_Discount_Item != 0) //{ // RecordRef discItem = new RecordRef(); // discItem.internalId = invoice_info.Accounting_Discount_Item.ToString(); // discItem.type = RecordType.discountItem; // invoiceObject.discountItem = discItem; //} #endregion //RecordRef Approval = new RecordRef(); //Approval.internalId = "2"; ////Approval.type = RecordType.; //invoiceObject.approvalStatus = Approval; #region Invoice Custom Attributes FoodicsRef = new StringCustomFieldRef(); FoodicsRef.scriptId = "custbody_da_foodics_reference"; FoodicsRef.value = invoice_info.BarCode.ToString(); FoodicsNumb = new StringCustomFieldRef(); FoodicsNumb.scriptId = "custbody_da_foodics_number"; FoodicsNumb.value = invoice_info.Number.ToString(); CreatedBy = new StringCustomFieldRef(); CreatedBy.scriptId = "custbody_da_foodics_createdby"; CreatedBy.value = invoice_info.CreatedBy != null?invoice_info.CreatedBy.ToString() : ""; Source = new StringCustomFieldRef(); Source.scriptId = "custbody_da_foodics_source"; Source.value = invoice_info.Source.ToString(); customFieldRefArray = new CustomFieldRef[5]; customFieldRefArray[0] = orderDiscount; customFieldRefArray[1] = FoodicsRef; customFieldRefArray[2] = FoodicsNumb; customFieldRefArray[3] = CreatedBy; customFieldRefArray[4] = Source; invoiceObject.customFieldList = customFieldRefArray; #endregion InvoiceArr[i] = invoiceObject; } catch (Exception ex) { //invoiceLst.RemoveAt(i); LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } } // Send invoice list to netsuite WriteResponseList wr = Service(true).addList(InvoiceArr); result = wr.status.isSuccess; if (result) { //Update database with returned Netsuite ids UpdatedInvoice(invoiceLst, wr); } } } } } catch (Exception ex) { LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } return(0); }
private CreditMemoItem CreateCreditItem(Setting objSetting, Foodics.NetSuite.Shared.Model.InvoiceItem itemDetails) { CreditMemoItem invoiceItemObject = new CreditMemoItem(); // tax code RecordRef taxCode = new RecordRef(); if (objSetting.TaxAlwaysAppliedInItems) { taxCode.internalId = objSetting.TaxCode_Netsuite_Id.ToString(); } else { //if (itemDetails.FoodicsTax > 0 && itemDetails.Item_Type != nameof(Item_Type.OtherChargeSaleItem)) if (itemDetails.FoodicsTax > 0 || itemDetails.Item_Type == nameof(Item_Type.OtherChargeSaleItem)) { taxCode.internalId = objSetting.TaxCode_Netsuite_Id.ToString(); } else { taxCode.internalId = objSetting.TaxCode_Free_Netsuite_Id.ToString(); } } //taxCode.internalId = itemDetails.FoodicsTax > 0 ? objSetting.TaxCode_Netsuite_Id.ToString() : objSetting.TaxCode_Free_Netsuite_Id.ToString(); taxCode.type = RecordType.taxAcct; if (int.Parse(taxCode.internalId) > 0) { invoiceItemObject.taxCode = taxCode; } // item RecordRef item = new RecordRef(); item.internalId = itemDetails.Item_Id.ToString(); item.type = (RecordType)Enum.Parse(typeof(RecordType), itemDetails.Item_Type, true); invoiceItemObject.item = item; if (Utility.ConvertToInt(itemDetails.Units) > 0) { RecordRef unit = new RecordRef(); unit.internalId = itemDetails.Units.ToString(); unit.type = RecordType.unitsType; invoiceItemObject.units = unit; } // price level #region price level RecordRef price = new RecordRef(); price.type = RecordType.priceLevel; price.internalId = "-1"; invoiceItemObject.price = price; float taxRate = 1 + (objSetting.TaxRate / 100); if (objSetting.TaxAlwaysAppliedInItems) { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount / taxRate); } else { if (itemDetails.FoodicsTax > 0 && itemDetails.Item_Type != nameof(Item_Type.OtherChargeSaleItem)) { if (objSetting.ItemTaxInclusive)//= tax inclusive in item price { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount / taxRate); } else { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount); } } else { invoiceItemObject.rate = Convert.ToString(itemDetails.Amount); } } #endregion invoiceItemObject.quantitySpecified = true; invoiceItemObject.quantity = itemDetails.Quantity; return(invoiceItemObject); }