public override Int64 Set(string parametersArr)
        {
            List <Item> Lst_ItemsAll = new GenericeDAO <Item>().GetWhere(" isnull(Netsuite_Id,0)=0 and inactive=0 and  Item_Type=" + (int)Item_Type.OtherChargeSaleItem).Take(100).ToList();

            List <Item> Lst_ItemsUpdate = Lst_ItemsAll.Where(x => x.Netsuite_Id > 0).ToList();
            List <Item> Lst_ItemsNew    = Lst_ItemsAll.Where(x => x.Netsuite_Id == 0 || x.Netsuite_Id < 0).ToList();

            if (Lst_ItemsAll.Count <= 0)
            {
                return(0);
            }
            // Send order list to netsuite
            if (Lst_ItemsNew.Count > 0)
            {
                com.netsuite.webservices.OtherChargeSaleItem[] ItemArrNew = GenerateNetSuitelst(Lst_ItemsNew);
                WriteResponseList wrNew = Service(true).addList(ItemArrNew);
                bool result             = wrNew.status.isSuccess;
                if (result)
                {
                    //Update database with returned Netsuite ids
                    UpdatedLst(Lst_ItemsNew, wrNew);
                }
            }

            if (Lst_ItemsUpdate.Count > 0)
            {
                com.netsuite.webservices.OtherChargeSaleItem[] ItemArrAdd = GenerateNetSuitelst(Lst_ItemsUpdate);
                // Send order list to netsuite
                WriteResponseList wr = Service(true).updateList(ItemArrAdd);
            }

            return(0);
        }
        private void Generate_Save_NetSuiteLst(List <FoodicsOrder> OrderLstAll, int Subsidiary_Id)
        {
            try
            {
                int     Exe_length = 5;
                int     lstend     = Exe_length;
                Setting objSetting = new GenericeDAO <Setting>().GetWhere("Subsidiary_Netsuite_Id=" + Subsidiary_Id).FirstOrDefault();
                if (OrderLstAll.Count > 0)
                {
                    for (int Index = 0; Index < OrderLstAll.Count; Index += Exe_length)
                    {
                        if (Index + Exe_length >= OrderLstAll.Count)
                        {
                            lstend = OrderLstAll.Count - Index;
                        }
                        List <FoodicsOrder> OrderLst = OrderLstAll.GetRange(Index, lstend);
                        if (OrderLst.Count > 0)
                        {
                            List <PaymentMethod>       PaymentMethodLst       = new GenericeDAO <PaymentMethod>().GetAll();
                            List <Invoice>             Invoicelst             = new List <Invoice>();
                            List <InvoiceItem>         InvoiceItemlst         = new List <InvoiceItem>();
                            List <PaymentMethodEntity> PaymentMethodEntitylst = new List <PaymentMethodEntity>();
                            foreach (var Foodicsitem in OrderLst)
                            {
                                //List<Invoice> invoiceLst = new GenericeDAO<Invoice>().GetWhere(" Foodics_Id = '" + Foodicsitem.id + "' AND Date = '" + Foodicsitem.business_date.ToString("yyyy-MM-dd") + "'");
                                List <Invoice> invoiceLst = new GenericeDAO <Invoice>().GetWhere(" Foodics_Id = '" + Foodicsitem.id + "' AND ISNULL(Netsuite_Id,0) > 0");
                                if (invoiceLst.Count <= 0)
                                {
                                    Invoice Netsuiteitem = new Invoice();
                                    //barcode
                                    Netsuiteitem.Foodics_Id    = Foodicsitem.id;
                                    Netsuiteitem.Order_Status  = Foodicsitem.status;
                                    Netsuiteitem.Subsidiary_Id = Subsidiary_Id;

                                    if (Foodicsitem.original_order != null && !string.IsNullOrEmpty(Foodicsitem.original_order.id))
                                    {
                                        Netsuiteitem.Original_Foodics_Id = Foodicsitem.original_order.id;
                                    }
                                    else
                                    {
                                        Netsuiteitem.Original_Foodics_Id = "0";
                                    }

                                    if (Foodicsitem.Customer != null && !string.IsNullOrEmpty(Foodicsitem.Customer.Id))
                                    {
                                        Customer obj = new GenericeDAO <Customer>().GetByFoodicsId(Foodicsitem.Customer.Id);
                                        if (obj != null && Utility.ConvertToInt(obj.Id) > 0)
                                        {
                                            Netsuiteitem.Customer_Id          = Utility.ConvertToInt(obj.Id);
                                            Netsuiteitem.Customer_Netsuite_Id = obj.Netsuite_Id;
                                        }
                                    }
                                    else
                                    {
                                        Netsuiteitem.Customer_Id          = 0;
                                        Netsuiteitem.Customer_Netsuite_Id = 0;
                                    }


                                    if (Foodicsitem.Branch != null && !string.IsNullOrEmpty(Foodicsitem.Branch.id))
                                    {
                                        Location obj = new GenericeDAO <Location>().GetByFoodicsId(Foodicsitem.Branch.id);
                                        Netsuiteitem.Location_Id = obj.Netsuite_Id;
                                    }
                                    else
                                    {
                                        Netsuiteitem.Location_Id = 0;
                                    }

                                    //Invoice Discount
                                    if (Foodicsitem.discount != null && !string.IsNullOrEmpty(Foodicsitem.discount.id))
                                    {
                                        Discount obj = new GenericeDAO <Discount>().GetByFoodicsId(Foodicsitem.discount.id);
                                        if (obj != null && obj.Netsuite_Id > 0)
                                        {
                                            Netsuiteitem.Discount_Id = obj.Netsuite_Id;
                                        }
                                    }
                                    //Foodics Source
                                    if (Foodicsitem.source > 0)
                                    {
                                        Netsuiteitem.Source = Enum.GetName(typeof(InvoiceSource), Foodicsitem.source);
                                    }
                                    //Foodics CreatedBY
                                    if (Foodicsitem.creator != null && !string.IsNullOrEmpty(Foodicsitem.creator.id))
                                    {
                                        Netsuiteitem.CreatedBy = Foodicsitem.creator.name;
                                    }
                                    Netsuiteitem.Invoice_Discount_Type = Foodicsitem.discount_type;
                                    Netsuiteitem.Total_Discount        = (float)Foodicsitem.discount_amount;
                                    Netsuiteitem.Date     = Foodicsitem.business_date;
                                    Netsuiteitem.CreateAt = Foodicsitem.created_at;
                                    Netsuiteitem.OpenAt   = Foodicsitem.opened_at;
                                    Netsuiteitem.CloseAt  = Foodicsitem.closed_at;
                                    Netsuiteitem.UpdateAt = Foodicsitem.updated_at;

                                    Netsuiteitem.Interval_Note = Foodicsitem.kitchen_notes + Foodicsitem.customer_notes;
                                    Netsuiteitem.Notes         = Netsuiteitem.Interval_Note;

                                    Netsuiteitem.Paid        = (float)Foodicsitem.total_price;
                                    Netsuiteitem.Net_Payable = (float)Foodicsitem.subtotal_price;

                                    Netsuiteitem.BarCode = Foodicsitem.reference;
                                    Netsuiteitem.Number  = Foodicsitem.number.ToString();
                                    //Products
                                    foreach (var prodobj in Foodicsitem.Products)
                                    {
                                        GetProducts(objSetting, InvoiceItemlst, Foodicsitem, prodobj, "", "");
                                    }
                                    if (Foodicsitem.combos != null)
                                    {
                                        foreach (var Comboobj in Foodicsitem.combos)
                                        {
                                            foreach (var prodobj in Comboobj.Products)
                                            {
                                                GetProducts(objSetting, InvoiceItemlst, Foodicsitem, prodobj, Comboobj.combo_size.name, Comboobj.combo_size.combo.name);
                                            }
                                        }
                                    }
                                    if (Foodicsitem.charges != null)
                                    {
                                        foreach (var objCharges in Foodicsitem.charges)
                                        {
                                            Product  objproduct = new Product();
                                            Products objProds   = new Products();
                                            objProds.quantity   = 1;
                                            objProds.unit_price = objCharges.amount;
                                            objProds.Product    = objproduct;
                                            objProds.status     = 3;
                                            foreach (var objCharge in objCharges.charge)
                                            {
                                                objproduct.id   = objCharge.id;
                                                objproduct.name = objCharge.name;
                                                GetProducts(objSetting, InvoiceItemlst, Foodicsitem, objProds, "", "");
                                            }
                                        }
                                    }
                                    //payment methods
                                    foreach (var payobj in Foodicsitem.payments)
                                    {
                                        PaymentMethod PaymentMethodobj = PaymentMethodLst.Where(x => x.Foodics_Id == payobj.payment_method.id).FirstOrDefault();

                                        PaymentMethodEntity paymethod = new PaymentMethodEntity();

                                        paymethod.Foodics_Id = Foodicsitem.id;

                                        paymethod.Entity_Type   = 1;
                                        paymethod.Amount        = (float)payobj.amount;
                                        paymethod.Ref           = payobj.payment_method.name;
                                        paymethod.Notes         = payobj.payment_method.name;
                                        paymethod.Business_Date = payobj.Business_Date;
                                        if (PaymentMethodobj != null && PaymentMethodobj.Netsuite_Id > 0)
                                        {
                                            paymethod.Payment_Method            = PaymentMethodobj.Name_En;
                                            paymethod.Payment_Method_Id         = PaymentMethodobj.Netsuite_Id;
                                            paymethod.Payment_Method_Percentage = PaymentMethodobj.Percentage;
                                        }
                                        else
                                        {
                                            paymethod.Payment_Method            = "Cash";
                                            paymethod.Payment_Method_Id         = 1;
                                            paymethod.Payment_Method_Percentage = 0;
                                        }
                                        paymethod.Payment_Method_Type             = 0;
                                        paymethod.Payment_Method_Type_Netsuite_Id = 0;
                                        PaymentMethodEntitylst.Add(paymethod);
                                    }
                                    Invoicelst.Add(Netsuiteitem);
                                }
                            }
                            new GenericeDAO <Invoice>().InvoiceDetailsDelete(Invoicelst);
                            new GenericeDAO <Invoice>().ListInsertOnly(Invoicelst);
                            new GenericeDAO <InvoiceItem>().ListInsertOnly(InvoiceItemlst);
                            new GenericeDAO <PaymentMethodEntity>().ListInsertOnly(PaymentMethodEntitylst);
                            //new CustomDAO().InvoiceRelatedUpdate();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message);
            }
        }
        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);
        }