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);
        }
示例#2
0
        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);
        }