public M4PLPurchaseOrderCreationResponse GeneratePurchaseOrderInNav(long jobId, string navAPIUrl, string navAPIUserName, string navAPIPassword, long customerId, ActiveUser activeUser) { var jobResult = DataAccess.Job.JobCommands.Get(activeUser, Convert.ToInt64(jobId)); M4PLPurchaseOrderCreationResponse m4PLPurchaseOrderCreationResponse = null; if (jobResult != null && jobResult.JobCompleted && jobResult.JobOriginDateTimeActual.HasValue && jobResult.JobDeliveryDateTimeActual.HasValue) { List <long> jobIdList = new List <long>(); bool isElectronicInvoice = false; bool isManualInvoice = false; bool isDeliveryChargeRemovalRequired = false; bool isPurchaseItemPresent = false; List <PurchaseOrderItem> manualPurchaseOrderItemRequest = null; List <PurchaseOrderItem> electronicPurchaseOrderItemRequest = null; jobIdList.Add(jobResult.Id); m4PLPurchaseOrderCreationResponse = new M4PLPurchaseOrderCreationResponse(); if (!jobResult.IsParentOrder) { isDeliveryChargeRemovalRequired = DataAccess.Job.JobCommands.GetJobDeliveryChargeRemovalRequired(Convert.ToInt64(jobResult.Id), customerId); } if (isDeliveryChargeRemovalRequired) { DataAccess.Job.JobCommands.UpdateJobCostCodeStatus(jobResult.Id, (int)StatusType.Delete, customerId); } List <PurchaseOrderItem> purchaseOrderItemRequest = DataAccess.Finance.NavSalesOrderCommand.GetPurchaseOrderItemCreationData(activeUser, jobIdList, Entities.EntitiesAlias.PurchaseOrderItem); isPurchaseItemPresent = purchaseOrderItemRequest?.Any() ?? false; isManualInvoice = !isPurchaseItemPresent || (isPurchaseItemPresent && purchaseOrderItemRequest.Any(x => !x.Electronic_Invoice)) ? true : false; manualPurchaseOrderItemRequest = isPurchaseItemPresent && isManualInvoice?purchaseOrderItemRequest.Where(x => !x.Electronic_Invoice).ToList() : null; isElectronicInvoice = isPurchaseItemPresent && purchaseOrderItemRequest.Any(x => x.Electronic_Invoice) ? true : false; electronicPurchaseOrderItemRequest = isElectronicInvoice ? purchaseOrderItemRequest.Where(x => x.Electronic_Invoice).ToList() : null; if (!string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber) && (!jobResult.JobElectronicInvoice || !isElectronicInvoice)) { bool isDeleted = false; NavPurchaseOrderHelper.DeletePurchaseOrderForNAV(jobResult.JobElectronicInvoicePONumber, jobResult.Id, true, navAPIUrl, navAPIUserName, navAPIPassword, out isDeleted); jobResult.JobElectronicInvoicePONumber = isDeleted ? string.Empty : jobResult.JobElectronicInvoicePONumber; } if (!string.IsNullOrEmpty(jobResult.JobPONumber) && (!isManualInvoice || !isPurchaseItemPresent)) { bool isDeleted = false; NavPurchaseOrderHelper.DeletePurchaseOrderForNAV(jobResult.JobPONumber, jobResult.Id, false, navAPIUrl, navAPIUserName, navAPIPassword, out isDeleted); jobResult.JobPONumber = isDeleted ? string.Empty : jobResult.JobPONumber; } if (!string.IsNullOrEmpty(jobResult.JobPONumber)) { var existingPurchaseOrder = NavPurchaseOrderHelper.GetPurchaseOrderForNAV(navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobPONumber); if (existingPurchaseOrder == null) { M4PL.DataAccess.Finance.NavSalesOrderCommand.DeleteJobOrderMapping(jobResult.Id, false, Entities.EntitiesAlias.PurchaseOrder.ToString()); jobResult.JobPONumber = string.Empty; } } if (!string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber)) { var existingElectronicPurchaseOrder = NavPurchaseOrderHelper.GetPurchaseOrderForNAV(navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoicePONumber); if (existingElectronicPurchaseOrder == null) { M4PL.DataAccess.Finance.NavSalesOrderCommand.DeleteJobOrderMapping(jobResult.Id, true, Entities.EntitiesAlias.PurchaseOrder.ToString()); jobResult.JobElectronicInvoicePONumber = string.Empty; } } if (!jobResult.JobElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobPONumber)) { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.GeneratePurchaseOrderForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoice, purchaseOrderItemRequest); } else { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.UpdatePurchaseOrderForNAV(activeUser, jobIdList, string.IsNullOrEmpty(jobResult.JobPONumber) ? jobResult.JobElectronicInvoicePONumber : jobResult.JobPONumber, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoice, purchaseOrderItemRequest); } } else if (jobResult.JobElectronicInvoice && (!isPurchaseItemPresent || !isElectronicInvoice)) { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber)) { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.GeneratePurchaseOrderForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoice, purchaseOrderItemRequest); } else { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.UpdatePurchaseOrderForNAV(activeUser, jobIdList, string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber) ? jobResult.JobPONumber : jobResult.JobElectronicInvoicePONumber, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoice, purchaseOrderItemRequest); } } else { if (isManualInvoice) { if (string.IsNullOrEmpty(jobResult.JobPONumber)) { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.GeneratePurchaseOrderForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, false, manualPurchaseOrderItemRequest); } else { m4PLPurchaseOrderCreationResponse.ManualPurchaseOrder = NavPurchaseOrderHelper.UpdatePurchaseOrderForNAV(activeUser, jobIdList, string.IsNullOrEmpty(jobResult.JobPONumber) ? jobResult.JobElectronicInvoicePONumber : jobResult.JobPONumber, navAPIUrl, navAPIUserName, navAPIPassword, false, manualPurchaseOrderItemRequest); } } if (isElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber)) { m4PLPurchaseOrderCreationResponse.ElectronicPurchaseOrder = NavPurchaseOrderHelper.GeneratePurchaseOrderForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, true, electronicPurchaseOrderItemRequest); } else { m4PLPurchaseOrderCreationResponse.ElectronicPurchaseOrder = NavPurchaseOrderHelper.UpdatePurchaseOrderForNAV(activeUser, jobIdList, !string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber) ? jobResult.JobElectronicInvoicePONumber : jobResult.JobPONumber, navAPIUrl, navAPIUserName, navAPIPassword, true, electronicPurchaseOrderItemRequest); } } } if (isDeliveryChargeRemovalRequired) { DataAccess.Job.JobCommands.UpdateJobCostCodeStatus((long)jobIdList?.FirstOrDefault(), (int)StatusType.Active, customerId); } } return(m4PLPurchaseOrderCreationResponse); }
private NavSalesOrderCreationResponse CreateSalesOrderForRollup(List <long> jobIdList, Entities.Job.Job jobResult) { bool isElectronicInvoice = false; bool isManualInvoice = false; List <SalesOrderItem> manualSalesOrderItemRequest = null; List <SalesOrderItem> electronicSalesOrderItemRequest = null; NavSalesOrderCreationResponse navSalesOrderCreationResponse = new NavSalesOrderCreationResponse(); List <SalesOrderItem> salesOrderItemRequest = _commands.GetSalesOrderItemCreationData(ActiveUser, jobIdList, Entities.EntitiesAlias.ShippingItem); if (salesOrderItemRequest == null || (salesOrderItemRequest != null && salesOrderItemRequest.Count == 0)) { isManualInvoice = true; isElectronicInvoice = false; } else if (salesOrderItemRequest != null && salesOrderItemRequest.Count > 0) { isElectronicInvoice = salesOrderItemRequest.Where(x => x.Electronic_Invoice).Any() ? true : false; isManualInvoice = salesOrderItemRequest.Where(x => !x.Electronic_Invoice).Any() ? true : false; manualSalesOrderItemRequest = isManualInvoice ? salesOrderItemRequest.Where(x => !x.Electronic_Invoice).ToList() : null; electronicSalesOrderItemRequest = isElectronicInvoice ? salesOrderItemRequest.Where(x => x.Electronic_Invoice).ToList() : null; } if ((!jobResult.JobElectronicInvoice || (salesOrderItemRequest != null && salesOrderItemRequest.Count > 0 && !salesOrderItemRequest.Where(x => x.Electronic_Invoice).Any())) && !string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { bool isDeleted = false; NavSalesOrderHelper.DeleteSalesOrderForNAV(ActiveUser, jobResult.Id, true, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.JobElectronicInvoiceSONumber, out isDeleted); jobResult.JobElectronicInvoiceSONumber = isDeleted ? string.Empty : jobResult.JobElectronicInvoiceSONumber; } if (!string.IsNullOrEmpty(jobResult.JobSONumber) && ((salesOrderItemRequest == null || (salesOrderItemRequest != null && salesOrderItemRequest.Count == 0)) || (salesOrderItemRequest != null && salesOrderItemRequest.Count > 0 && !salesOrderItemRequest.Where(x => !x.Electronic_Invoice).Any()))) { bool isDeleted = false; NavSalesOrderHelper.DeleteSalesOrderForNAV(ActiveUser, jobResult.Id, false, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.JobSONumber, out isDeleted); jobResult.JobSONumber = isDeleted ? string.Empty : jobResult.JobSONumber; } if (!jobResult.JobElectronicInvoice || (jobResult.JobElectronicInvoice && (salesOrderItemRequest == null || (salesOrderItemRequest != null && salesOrderItemRequest.Count == 0))) || (jobResult.JobElectronicInvoice && salesOrderItemRequest != null && salesOrderItemRequest.Count > 0 && !salesOrderItemRequest.Where(x => x.Electronic_Invoice).Any())) { if (!jobResult.JobElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobSONumber)) { navSalesOrderCreationResponse.ManualNavSalesOrder = NavSalesOrderHelper.StartOrderCreationProcessForNAV(ActiveUser, jobIdList, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } else { navSalesOrderCreationResponse.ManualNavSalesOrder = NavSalesOrderHelper.StartOrderUpdationProcessForNAV(ActiveUser, jobIdList, jobResult.JobSONumber, string.IsNullOrEmpty(jobResult.JobCustomerPurchaseOrder) ? jobResult.JobElectronicInvoicePONumber : jobResult.JobCustomerPurchaseOrder, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } } else { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { navSalesOrderCreationResponse.ElectronicNavSalesOrder = NavSalesOrderHelper.StartOrderCreationProcessForNAV(ActiveUser, jobIdList, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } else { navSalesOrderCreationResponse.ElectronicNavSalesOrder = NavSalesOrderHelper.StartOrderUpdationProcessForNAV(ActiveUser, jobIdList, jobResult.JobElectronicInvoiceSONumber, string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber) ? jobResult.JobCustomerPurchaseOrder : jobResult.JobElectronicInvoicePONumber, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } } } else { if (isManualInvoice) { if (string.IsNullOrEmpty(jobResult.JobSONumber)) { navSalesOrderCreationResponse.ManualNavSalesOrder = NavSalesOrderHelper.StartOrderCreationProcessForNAV(ActiveUser, jobIdList, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, false, manualSalesOrderItemRequest); } else { navSalesOrderCreationResponse.ManualNavSalesOrder = NavSalesOrderHelper.StartOrderUpdationProcessForNAV(ActiveUser, jobIdList, jobResult.JobSONumber, jobResult.JobCustomerPurchaseOrder, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, false, manualSalesOrderItemRequest); } } if (isElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { navSalesOrderCreationResponse.ElectronicNavSalesOrder = NavSalesOrderHelper.StartOrderCreationProcessForNAV(ActiveUser, jobIdList, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, true, electronicSalesOrderItemRequest); } else { navSalesOrderCreationResponse.ElectronicNavSalesOrder = NavSalesOrderHelper.StartOrderUpdationProcessForNAV(ActiveUser, jobIdList, jobResult.JobElectronicInvoiceSONumber, jobResult.JobElectronicInvoicePONumber, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.VendorERPId, true, electronicSalesOrderItemRequest); } } } if (!string.IsNullOrEmpty(jobResult.VendorERPId)) { //Task.Run(() => //{ NavPurchaseOrderHelper.PurchaseOrderCreationProcessForNAV(ActiveUser, jobIdList, M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, jobResult.JobElectronicInvoice); //}); } return(navSalesOrderCreationResponse); }