public static async Task <WSPurchaseInvLine.CreateMultiple_Result> CreateMultipleAsync(PurchOrderDTO purchFromSupplier, NAVWSConfigurations WSConfigurations) { if (purchFromSupplier == null) { throw new ArgumentNullException("purchFromSupplier"); } WSPurchaseInvLine.CreateMultiple navCreate = new WSPurchaseInvLine.CreateMultiple(); navCreate.WSPurchInvLineInterm_List = purchFromSupplier.Lines.Select(purchLine => new WSPurchaseInvLine.WSPurchInvLineInterm() { Document_Type = WSPurchaseInvLine.Document_Type.Order, Document_TypeSpecified = true, Document_No = purchFromSupplier.NAVPrePurchOrderId, No = purchLine.Code, Buy_from_Vendor_No = purchFromSupplier.SupplierId, Pay_to_Vendor_No = purchFromSupplier.SupplierId, Quantity = purchLine.QuantityRequired.HasValue ? purchLine.QuantityRequired.Value : 0, QuantitySpecified = true, gLocation = purchLine.LocationCode, Job_No = purchLine.ProjectNo, RegionCode20 = purchLine.RegionCode, FunctionAreaCode20 = purchLine.FunctionalAreaCode, ResponsabilityCenterCode20 = purchLine.CenterResponsibilityCode, Type = WSPurchaseInvLine.Type.Item, TypeSpecified = true, Description100 = purchLine.Description, Line_Discount_Percent = purchLine.DiscountPercentage.HasValue ? purchLine.DiscountPercentage.Value : 0, Line_Discount_PercentSpecified = purchLine.DiscountPercentage.HasValue, VAT_Bus_Posting_Group = purchLine.VATBusinessPostingGroup, VAT_Prod_Posting_Group = purchLine.VATProductPostingGroup, Requisition_No = purchFromSupplier.RequisitionId, Requisition_Line_No = purchLine.LineId.HasValue ? purchLine.LineId.Value : 0, Requisition_Line_NoSpecified = true, Unit_of_Measure_Code = purchLine.UnitMeasureCode, Direct_Unit_Cost = purchLine.UnitCost.HasValue ? purchLine.UnitCost.Value : 0, Direct_Unit_CostSpecified = true, Blanket_Order_No = string.IsNullOrEmpty(purchLine.OpenOrderNo) ? string.Empty : purchLine.OpenOrderNo, Blanket_Order_Line_No = purchLine.OpenOrderLineNo.HasValue ? purchLine.OpenOrderLineNo.Value : 0, Blanket_Order_Line_NoSpecified = purchLine.OpenOrderLineNo.HasValue, }) .ToArray(); //Configure NAV Client EndpointAddress ws_URL = new EndpointAddress(WSConfigurations.WS_PurchaseInvLine_URL.Replace("Company", WSConfigurations.WS_User_Company)); WSPurchaseInvLine.WSPurchInvLineInterm_PortClient ws_Client = new WSPurchaseInvLine.WSPurchInvLineInterm_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) //{ // throw; //} }
/// <summary> /// Para criar encomendas com referência a encomendas de compra abertas. /// Necessário para contornar validação do NAV no campo Pay-to Vendor No.". Primeiro criar as linhas para gerar as chaves, etc e depois atualizar e preencher com os dados pretendidos. /// </summary> /// <param name="purchFromSupplier"></param> /// <param name="WSConfigurations"></param> /// <returns></returns> public static bool CreateAndUpdateMultipleAsync(PurchOrderDTO purchFromSupplier, NAVWSConfigurations WSConfigurations) { if (purchFromSupplier == null) { throw new ArgumentNullException("purchFromSupplier"); } WSPurchaseInvLine.CreateMultiple navCreate = new WSPurchaseInvLine.CreateMultiple(); navCreate.WSPurchInvLineInterm_List = purchFromSupplier.Lines.Select(purchLine => new WSPurchaseInvLine.WSPurchInvLineInterm() { Document_Type = WSPurchaseInvLine.Document_Type.Order, Document_TypeSpecified = true, Document_No = purchFromSupplier.NAVPrePurchOrderId, Buy_from_Vendor_No = purchFromSupplier.SupplierId, Requisition_No = purchFromSupplier.RequisitionId, Requisition_Line_No = purchLine.LineId.HasValue ? purchLine.LineId.Value : 0, Requisition_Line_NoSpecified = true ////NR20181113 - Adicionei, mas julgo que é melhor retirar, pois os campos são atualizados na chamada do método UpdateMultipleAsync //,Direct_Unit_Cost = purchLine.UnitCost.HasValue ? purchLine.UnitCost.Value : 0, //Direct_Unit_CostSpecified = true, //Description = purchLine.Description, //Description_2 = purchLine.Description2, //FunctionAreaCode20 = purchLine.FunctionalAreaCode, //Job_No = purchLine.ProjectNo, //Line_Discount_Percent = purchLine.DiscountPercentage.HasValue ? purchLine.DiscountPercentage.Value : 0, //Line_Discount_PercentSpecified = true, //Quantity = purchLine.QuantityRequired.HasValue ? purchLine.QuantityRequired.Value : 0, //QuantitySpecified = true, //RegionCode20 = purchLine.RegionCode, //ResponsabilityCenterCode20 = purchLine.CenterResponsibilityCode, //Unit_of_Measure_Code = purchLine.UnitMeasureCode, //VAT_Bus_Posting_Group = purchLine.VATBusinessPostingGroup, //VAT_Prod_Posting_Group = purchLine.VATProductPostingGroup }) .ToArray(); //Configure NAV Client EndpointAddress ws_URL = new EndpointAddress(WSConfigurations.WS_PurchaseInvLine_URL.Replace("Company", WSConfigurations.WS_User_Company)); WSPurchaseInvLine.WSPurchInvLineInterm_PortClient ws_Client = new WSPurchaseInvLine.WSPurchInvLineInterm_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); Task <WSPurchaseInvLine.CreateMultiple_Result> createPurchaseLinesTask = ws_Client.CreateMultipleAsync(navCreate); createPurchaseLinesTask.Wait(); if (createPurchaseLinesTask.IsCompletedSuccessfully) { Task <WSPurchaseInvLine.UpdateMultiple_Result> updatePurchaseLinesTask = UpdateMultipleAsync(purchFromSupplier, createPurchaseLinesTask.Result.WSPurchInvLineInterm_List.ToList(), WSConfigurations); updatePurchaseLinesTask.Wait(); return(updatePurchaseLinesTask.IsCompletedSuccessfully); } return(false); //try //{ //return await ws_Client.CreateMultipleAsync(navCreate); //} //catch (Exception ex) //{ // throw; //} }