public static async Task <WSCreatePreInvoiceLine.CreateMultiple_Result> CreatePreInvoiceLineList(List <LinhasFaturaçãoContrato> LinesList, String HeaderNo, NAVWSConfigurations WSConfigurations)
        {
            int counter = 0;

            WSCreatePreInvoiceLine.WsPreInvoiceLine[] parsedList = LinesList.Select(
                x => new WSCreatePreInvoiceLine.WsPreInvoiceLine
            {
                Document_No            = HeaderNo,
                Line_No                = counter += 10000,
                Line_NoSpecified       = true,
                Document_Type          = WSCreatePreInvoiceLine.Document_Type.Invoice,
                Document_TypeSpecified = true,
                No                         = x.Código,
                TypeSpecified              = true,
                Type                       = ConvertToSaleslineType(x.Tipo.Replace(" ", String.Empty)),
                Description                = x.Descrição != null && x.Descrição.Length > 50 ? x.Descrição.Substring(0, 50) : !string.IsNullOrEmpty(x.Descrição) ? x.Descrição : "",
                Description_2              = x.Descricao2 != null && x.Descricao2.Length > 50 ? x.Descricao2.Substring(0, 50) : !string.IsNullOrEmpty(x.Descricao2) ? x.Descricao2 : "",
                Quantity                   = x.Quantidade.HasValue ? x.Quantidade.Value : 0,
                QuantitySpecified          = true,
                Unit_of_Measure            = x.CódUnidadeMedida,
                Unit_Price                 = x.PreçoUnitário.HasValue ? x.PreçoUnitário.Value : 0,
                Unit_PriceSpecified        = true,
                Service_Contract_No        = x.NºContrato,
                Contract_No                = x.NºContrato,
                gJobDimension              = x.NºContrato,
                RegionCode20               = x.CódigoRegião,
                FunctionAreaCode20         = x.CódigoÁreaFuncional,
                ResponsabilityCenterCode20 = x.CódigoCentroResponsabilidade
            }).ToArray();

            WSCreatePreInvoiceLine.CreateMultiple NAVCreate = new WSCreatePreInvoiceLine.CreateMultiple(parsedList);

            //Configure NAV Client
            EndpointAddress WS_URL = new EndpointAddress(WSConfigurations.WS_PreInvoiceLine_URL.Replace("Company", WSConfigurations.WS_User_Company));

            WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient WS_Client = new WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient(navWSBinding, WS_URL);
            WS_Client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
            WS_Client.ClientCredentials.Windows.ClientCredential          = new NetworkCredential(WSConfigurations.WS_User_Login, WSConfigurations.WS_User_Password, WSConfigurations.WS_User_Domain);

            try
            {
                WSCreatePreInvoiceLine.CreateMultiple_Result result = await WS_Client.CreateMultipleAsync(NAVCreate);

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static async Task <WSCreatePreInvoiceLine.CreateMultiple_Result> CreatePreInvoiceLineListProject(List <SPInvoiceListViewModel> LinesList, String HeaderNo, string OptionInvoice, NAVWSConfigurations WSConfigurations)
        {
            int counter = 0;
            int array   = 0;

            WSCreatePreInvoiceLine.WsPreInvoiceLine[] parsedList = new WSCreatePreInvoiceLine.WsPreInvoiceLine[LinesList.Count];

            foreach (var x in LinesList)
            {
                TiposRefeição refeicao = DBMealTypes.GetById(x.MealType ?? 0);

                WSCreatePreInvoiceLine.WsPreInvoiceLine line = new WSCreatePreInvoiceLine.WsPreInvoiceLine();

                line.Document_Type          = OptionInvoice.Replace(" ", String.Empty) == "4" ? WSCreatePreInvoiceLine.Document_Type.Credit_Memo : WSCreatePreInvoiceLine.Document_Type.Invoice;
                line.Document_TypeSpecified = true;
                line.Document_No            = HeaderNo;
                line.Type              = ConvertInvoiceLineType(x.Type.ToString());
                line.No                = x.Code;
                line.Description100    = x.Description;
                line.QuantitySpecified = true;
                line.Quantity          = x.Quantity.HasValue ? x.Quantity.Value : 0;
                line.TypeSpecified     = true;


                line.Unit_of_Measure = x.MeasurementUnitCode;
                //line.Unit_of_Measure_Code = x.MeasurementUnitCode;


                line.Location_Code          = x.LocationCode;
                line.Unit_Price             = x.UnitPrice.HasValue ? x.UnitPrice.Value : 0;
                line.Unit_PriceSpecified    = true;
                line.Unit_Cost_LCY          = x.UnitCost.HasValue ? x.UnitCost.Value : 0;
                line.Unit_Cost_LCYSpecified = true;
                line.Line_No                   = counter += 10000;
                line.Line_NoSpecified          = true;
                line.Job_No                    = x.ProjectNo;
                line.gJobDimension             = x.ProjectDimension;
                line.Service_Contract_No       = x.ContractNo;
                line.Contract_No_Portal        = x.ContractNo;
                line.Contract_No               = x.ContractNo;
                line.Tipo_Refeicao             = x.MealType.HasValue ? x.MealType.Value.ToString() : string.Empty;// (refeicao!=null) ? refeicao.Código.ToString() : "";
                line.Gen_Prod_Posting_Group    = (refeicao != null) ? refeicao.GrupoContabProduto : x.ProjectContabGroup;
                line.Cod_Serv_Cliente          = x.ServiceClientCode;
                line.Consumption_Date          = !string.IsNullOrEmpty(x.ConsumptionDate) ? DateTime.Parse(x.ConsumptionDate) : DateTime.MinValue;
                line.Consumption_DateSpecified = !string.IsNullOrEmpty(x.ConsumptionDate);

                line.Grupo_Serviço             = !string.IsNullOrEmpty(x.ServiceGroupCode) ? x.ServiceGroupCode : "";
                line.Service_Group_Description = !string.IsNullOrEmpty(x.ServiceGroupCode) && DBServices.GetById(x.ServiceGroupCode) != null?DBServices.GetById(x.ServiceGroupCode).Descrição : "";

                line.Nº_Guia_Externa            = x.ExternalGuideNo;
                line.Nº_Guia_Resíduos_GAR       = x.WasteGuideNo_GAR;
                line.RegionCode20               = x.RegionCode;
                line.FunctionAreaCode20         = x.FunctionalAreaCode;
                line.ResponsabilityCenterCode20 = x.ResponsabilityCenterCode;
                line.Des_Serv_Cliente           = !string.IsNullOrEmpty(x.ServiceClientCode) ? DBServices.GetById(x.ServiceClientCode) != null?DBServices.GetById(x.ServiceClientCode).Descrição : "" : "";

                line.Data_Registo_Diario          = !string.IsNullOrEmpty(x.ConsumptionDate) ? DateTime.Parse(x.ConsumptionDate) : DateTime.MinValue;
                line.Data_Registo_DiarioSpecified = !string.IsNullOrEmpty(x.ConsumptionDate);

                if (x.ResourceType.HasValue)
                {
                    line.Tipo_Recurso          = (WSCreatePreInvoiceLine.Tipo_Recurso)x.ResourceType.Value;
                    line.Tipo_RecursoSpecified = true;
                }
                parsedList[array] = line;
                array++;

                //Job_Journal_Line_No_Portal = x.LineNo,
                //Job_Journal_Line_No_PortalSpecified = true,
            }
            ;

            WSCreatePreInvoiceLine.CreateMultiple NAVCreate = new WSCreatePreInvoiceLine.CreateMultiple(parsedList);

            //Configure NAV Client
            EndpointAddress WS_URL = new EndpointAddress(WSConfigurations.WS_PreInvoiceLine_URL.Replace("Company", WSConfigurations.WS_User_Company));

            WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient WS_Client = new WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient(navWSBinding, WS_URL);
            WS_Client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
            WS_Client.ClientCredentials.Windows.ClientCredential          = new NetworkCredential(WSConfigurations.WS_User_Login, WSConfigurations.WS_User_Password, WSConfigurations.WS_User_Domain);

            //try
            //{
            return(await WS_Client.CreateMultipleAsync(NAVCreate));

            //}
            //catch (Exception ex)
            //{
            //    return null;
            //}
        }
        public static async Task <WSCreatePreInvoiceLine.CreateMultiple_Result> CreatePreInvoiceLineList(List <LinhasFaturaçãoContrato> LinesList, String HeaderNo, string InvoiceBorrowed, NAVWSConfigurations WSConfigurations)
        {
            int       counter       = 0;
            string    TextoFatura   = "";
            string    Mes           = InvoiceBorrowed.Substring(0, InvoiceBorrowed.IndexOf("/"));
            string    Ano           = InvoiceBorrowed.Substring(InvoiceBorrowed.IndexOf("/") + 1, 4);
            bool      ContratoQuota = false;
            Contratos Contrato      = DBContracts.GetByIdLastVersion(LinesList.FirstOrDefault().NºContrato);

            if (Contrato != null && Contrato.TipoContrato == 3 && Contrato.Tipo == 3) //Contrato Quotas
            {
                ContratoQuota = true;

                if (Contrato != null && !string.IsNullOrEmpty(Contrato.TextoFatura))
                {
                    TextoFatura = Contrato.TextoFatura;
                    TextoFatura = TextoFatura.Replace("<MES>", Mes);
                    TextoFatura = TextoFatura.Replace("<ANO>", Ano);
                }
            }

            WSCreatePreInvoiceLine.WsPreInvoiceLine[] parsedList = LinesList.Select(
                x => new WSCreatePreInvoiceLine.WsPreInvoiceLine
            {
                Document_No            = HeaderNo,
                Line_No                = counter += 10000,
                Line_NoSpecified       = true,
                Document_Type          = WSCreatePreInvoiceLine.Document_Type.Invoice,
                Document_TypeSpecified = true,
                No                         = x.Código,
                TypeSpecified              = true,
                Type                       = ConvertToSaleslineType(x.Tipo.Replace(" ", String.Empty)),
                Description                = ContratoQuota == false ? x.Descrição != null && x.Descrição.Length > 50 ? x.Descrição.Substring(0, 50) : !string.IsNullOrEmpty(x.Descrição) ? x.Descrição : "" : !string.IsNullOrEmpty(TextoFatura) ? TextoFatura : "",
                Description_2              = ContratoQuota == false ? x.Descricao2 != null && x.Descricao2.Length > 50 ? x.Descricao2.Substring(0, 50) : !string.IsNullOrEmpty(x.Descricao2) ? x.Descricao2 : "" : "",
                Quantity                   = x.Quantidade.HasValue ? x.Quantidade.Value : 0,
                QuantitySpecified          = true,
                Unit_of_Measure            = x.CódUnidadeMedida,
                Unit_Price                 = x.PreçoUnitário.HasValue ? x.PreçoUnitário.Value : 0,
                Unit_PriceSpecified        = true,
                Service_Contract_No        = x.NºContrato,
                Contract_No                = x.NºContrato,
                gJobDimension              = x.NºContrato,
                RegionCode20               = x.CódigoRegião,
                FunctionAreaCode20         = x.CódigoÁreaFuncional,
                ResponsabilityCenterCode20 = x.CódigoCentroResponsabilidade,
            }).ToArray();

            WSCreatePreInvoiceLine.CreateMultiple NAVCreate = new WSCreatePreInvoiceLine.CreateMultiple(parsedList);

            //Configure NAV Client
            EndpointAddress WS_URL = new EndpointAddress(WSConfigurations.WS_PreInvoiceLine_URL.Replace("Company", WSConfigurations.WS_User_Company));

            WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient WS_Client = new WSCreatePreInvoiceLine.WsPreInvoiceLine_PortClient(navWSBinding, WS_URL);
            WS_Client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Delegation;
            WS_Client.ClientCredentials.Windows.ClientCredential          = new NetworkCredential(WSConfigurations.WS_User_Login, WSConfigurations.WS_User_Password, WSConfigurations.WS_User_Domain);

            try
            {
                WSCreatePreInvoiceLine.CreateMultiple_Result result = await WS_Client.CreateMultipleAsync(NAVCreate);

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }