public List <CheckPostedInvoice> GetVendorCheckedInvoice(string checkNumber, ActiveUser activeUser = null) { List <CheckPostedInvoice> resultPostedInvoices = null; activeUser = activeUser == null ? ActiveUser : activeUser; var vendorLedgerData = GetNavVendorLedgerDataByCheckNumber(M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, checkNumber); if (vendorLedgerData?.VendorLedger != null) { var vendorPaymentRecord = vendorLedgerData.VendorLedger.FirstOrDefault(x => !string.IsNullOrEmpty(x.Document_Type) && x.Document_Type.Equals("Payment", StringComparison.OrdinalIgnoreCase)); bool isPermissionPresent = DataAccess.Vendor.VendorCommands.IsUserHasVendorPermission(vendorPaymentRecord?.Vendor_No, activeUser.UserId); string entryNumber = vendorPaymentRecord?.Entry_No; if (isPermissionPresent && !string.IsNullOrEmpty(entryNumber)) { var result = GetNavVendorLedgerDataByClosedByEntryNumber(M4PLBusinessConfiguration.NavAPIUrl, M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, entryNumber); if (result?.VendorLedger?.Count > 0 && result.VendorLedger.Where(x => !string.IsNullOrEmpty(x.Document_Type) && x.Document_Type.Equals("Invoice", StringComparison.OrdinalIgnoreCase)).Any()) { List <Task> tasks = new List <Task>(); resultPostedInvoices = new List <CheckPostedInvoice>(); var processingData = result.VendorLedger.Where(x => !string.IsNullOrEmpty(x.Document_Type) && x.Document_Type.Equals("Invoice", StringComparison.OrdinalIgnoreCase)); foreach (var currentVendorLedger in processingData) { tasks.Add(Task.Factory.StartNew(() => { var postedInvoice = NavSalesOrderHelper.GetNavPostedPurchaseInvoiceResponse(M4PLBusinessConfiguration.NavAPIUserName, M4PLBusinessConfiguration.NavAPIPassword, M4PLBusinessConfiguration.NavAPIUrl, currentVendorLedger.Document_No); if (postedInvoice != null && postedInvoice.NavPurchaseOrder != null && postedInvoice.NavPurchaseOrder.Count > 0) { postedInvoice.NavPurchaseOrder.ForEach(x => resultPostedInvoices.Add(new CheckPostedInvoice() { No = x.No, M4PL_JobId = x.Vendor_Invoice_No, Document_Date = x.Document_Date, Vendor_Order_No = x.Vendor_Order_No, Amount = processingData.Where(z => z.Document_No == x.No).FirstOrDefault().Credit_Amount.ToDecimal() })); } })); } if (tasks.Count > 0) { Task.WaitAll(tasks.ToArray()); } } } } return(resultPostedInvoices); }
public M4PLSalesOrderCreationResponse GenerateSalesOrderInNav(long jobId, string navAPIUrl, string navAPIUserName, string navAPIPassword, long customerId, ActiveUser activeUser) { var jobResult = DataAccess.Job.JobCommands.Get(activeUser, Convert.ToInt64(jobId)); M4PLSalesOrderCreationResponse m4PLSalesOrderCreationResponse = null; // Start Sales Order Creation Process Only When JobOriginDateTimeActual and JobDeliveryDateTimeActual are not null. if (jobResult != null && jobResult.JobCompleted && jobResult.JobOriginDateTimeActual.HasValue && jobResult.JobDeliveryDateTimeActual.HasValue) { bool isDeliveryChargeRemovalRequired = false; bool isElectronicInvoice = false; bool isManualInvoice = false; bool isSalesOrderItemPresent = false; List <SalesOrderItem> manualSalesOrderItemRequest = null; List <SalesOrderItem> electronicSalesOrderItemRequest = null; List <long> jobIdList = new List <long>(); m4PLSalesOrderCreationResponse = new M4PLSalesOrderCreationResponse(); jobIdList.Add(jobResult.Id); if (!jobResult.IsParentOrder) { isDeliveryChargeRemovalRequired = DataAccess.Job.JobCommands.GetJobDeliveryChargeRemovalRequired(Convert.ToInt64(jobResult.Id), customerId); if (isDeliveryChargeRemovalRequired) { DataAccess.Job.JobCommands.UpdateJobPriceCodeStatus(jobResult.Id, (int)StatusType.Delete, customerId); } else { jobResult.IsParentOrder = true; } } List <SalesOrderItem> salesOrderItemRequest = DataAccess.Finance.NavSalesOrderCommand.GetSalesOrderItemCreationData(activeUser, jobIdList, EntitiesAlias.ShippingItem); isSalesOrderItemPresent = salesOrderItemRequest?.Any() ?? false; isManualInvoice = !isSalesOrderItemPresent || (isSalesOrderItemPresent && salesOrderItemRequest.Any(x => !x.Electronic_Invoice)) ? true : false; manualSalesOrderItemRequest = isSalesOrderItemPresent && isManualInvoice?salesOrderItemRequest.Where(x => !x.Electronic_Invoice).ToList() : null; isElectronicInvoice = isSalesOrderItemPresent && salesOrderItemRequest.Any(x => x.Electronic_Invoice) ? true : false; electronicSalesOrderItemRequest = isElectronicInvoice ? salesOrderItemRequest.Where(x => x.Electronic_Invoice).ToList() : null; if (!string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber) && (!jobResult.JobElectronicInvoice || !isElectronicInvoice)) { bool isDeleted = false; NavSalesOrderHelper.DeleteSalesOrderForNAV(activeUser, jobResult.Id, true, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoiceSONumber, out isDeleted); jobResult.JobElectronicInvoiceSONumber = isDeleted ? string.Empty : jobResult.JobElectronicInvoiceSONumber; } if (!string.IsNullOrEmpty(jobResult.JobSONumber) && (!isSalesOrderItemPresent || !isManualInvoice)) { bool isDeleted = false; NavSalesOrderHelper.DeleteSalesOrderForNAV(activeUser, jobResult.Id, false, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobSONumber, out isDeleted); jobResult.JobSONumber = isDeleted ? string.Empty : jobResult.JobSONumber; } if (!string.IsNullOrEmpty(jobResult.JobSONumber)) { var existingSalesOrder = NavSalesOrderHelper.GetSalesOrderForNAV(navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobSONumber); if (existingSalesOrder == null) { DataAccess.Finance.NavSalesOrderCommand.DeleteJobOrderMapping(jobResult.Id, false, EntitiesAlias.SalesOrder.ToString()); jobResult.JobSONumber = string.Empty; } } if (!string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { var existingElectronicSalesOrder = NavSalesOrderHelper.GetSalesOrderForNAV(navAPIUrl, navAPIUserName, navAPIPassword, jobResult.JobElectronicInvoiceSONumber); if (existingElectronicSalesOrder == null) { DataAccess.Finance.NavSalesOrderCommand.DeleteJobOrderMapping(jobResult.Id, true, Entities.EntitiesAlias.SalesOrder.ToString()); jobResult.JobElectronicInvoiceSONumber = string.Empty; } } if (!jobResult.JobElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobSONumber)) { m4PLSalesOrderCreationResponse.ManualSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderCreationProcessForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } else { m4PLSalesOrderCreationResponse.ManualSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderUpdationProcessForNAV(activeUser, jobIdList, jobResult.JobSONumber, string.IsNullOrEmpty(jobResult.JobCustomerPurchaseOrder) ? jobResult.JobElectronicInvoicePONumber : jobResult.JobCustomerPurchaseOrder, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } } else if (jobResult.JobElectronicInvoice && (!isSalesOrderItemPresent || !isElectronicInvoice)) { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { m4PLSalesOrderCreationResponse.ManualSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderCreationProcessForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest, jobResult.IsParentOrder); } else { m4PLSalesOrderCreationResponse.ManualSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderUpdationProcessForNAV(activeUser, jobIdList, jobResult.JobElectronicInvoiceSONumber, string.IsNullOrEmpty(jobResult.JobElectronicInvoicePONumber) ? jobResult.JobCustomerPurchaseOrder : jobResult.JobElectronicInvoicePONumber, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, jobResult.JobElectronicInvoice, salesOrderItemRequest); } } else { if (isManualInvoice) { if (string.IsNullOrEmpty(jobResult.JobSONumber)) { m4PLSalesOrderCreationResponse.ManualSalesOrder = NavSalesOrderHelper.StartOrderCreationProcessForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, false, manualSalesOrderItemRequest, jobResult.IsParentOrder); } else { m4PLSalesOrderCreationResponse.ManualSalesOrder = NavSalesOrderHelper.StartOrderUpdationProcessForNAV(activeUser, jobIdList, jobResult.JobSONumber, jobResult.JobCustomerPurchaseOrder, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, false, manualSalesOrderItemRequest); } } if (isElectronicInvoice) { if (string.IsNullOrEmpty(jobResult.JobElectronicInvoiceSONumber)) { m4PLSalesOrderCreationResponse.ElectronicSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderCreationProcessForNAV(activeUser, jobIdList, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, true, electronicSalesOrderItemRequest, jobResult.IsParentOrder); } else { m4PLSalesOrderCreationResponse.ElectronicSalesOrder = SalesOrder.NavSalesOrderHelper.StartOrderUpdationProcessForNAV(activeUser, jobIdList, jobResult.JobElectronicInvoiceSONumber, jobResult.JobElectronicInvoicePONumber, navAPIUrl, navAPIUserName, navAPIPassword, jobResult.VendorERPId, true, electronicSalesOrderItemRequest); } } } if (isDeliveryChargeRemovalRequired) { DataAccess.Job.JobCommands.UpdateJobPriceCodeStatus((long)jobIdList?.FirstOrDefault(), (int)StatusType.Active, customerId); } } return(m4PLSalesOrderCreationResponse); }