public async Task <BidAndTenderRespObj> Handle(GetPreviousBidAndTenderQuery request, CancellationToken cancellationToken)
            {
                var result = await _repo.GetAllPrevSupplierBidAndTender(request.SupplierEmail);

                var response = new BidAndTenderRespObj {
                    Status = new APIResponseStatus {
                        Message = new APIResponseMessage()
                    }
                };
                CompanyStructureRespObj _Department = new CompanyStructureRespObj();

                if (result.Count() > 0)
                {
                    _Department = await _serverRequest.GetAllCompanyStructureAsync();
                }

                response.BidAndTenders = result?.Where(a => a.ApprovalStatusId == (int)ApprovalStatus.Approved || a.ApprovalStatusId == (int)ApprovalStatus.Pending)
                                         .Select(d => new BidAndTenderObj
                {
                    BidAndTenderId               = d.BidAndTenderId,
                    AmountApproved               = d.AmountApproved,
                    DateSubmitted                = d.DateSubmitted,
                    DecisionResult               = d.DecisionResult,
                    DescriptionOfRequest         = d?.DescriptionOfRequest,
                    Location                     = d?.Location,
                    LPOnumber                    = d?.LPOnumber,
                    ProposalTenderUploadType     = d.ProposalTenderUploadType,
                    ProposalTenderUploadPath     = d.ProposalTenderUploadPath,
                    ProposalTenderUploadName     = d.ProposalTenderUploadName,
                    ProposalTenderUploadFullPath = d.ProposalTenderUploadFullPath,
                    ExpectedDeliveryDate         = d.ExpectedDeliveryDate,
                    ProposedAmount               = d.ProposedAmount.ToString(),
                    RequestDate                  = d.RequestDate,
                    RequestingDepartment         = d.RequestingDepartment,
                    SupplierName                 = d?.SupplierName,
                    Suppliernumber               = d?.Suppliernumber,
                    DecisionReultName            = Convert.ToString((DecisionResult)d.DecisionResult),
                    Quantity                     = d.Quantity,
                    Total                    = d.Total,
                    ApprovalStatusId         = d.ApprovalStatusId,
                    SupplierId               = d.SupplierId,
                    WorkflowToken            = d.WorkflowToken,
                    SupplierAddress          = d.SupplierAddress,
                    RequestingDepartmentName = _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name,
                }).ToList() ?? new List <BidAndTenderObj>();
                response.Status = new APIResponseStatus
                {
                    IsSuccessful = true,
                    Message      = new APIResponseMessage
                    {
                        FriendlyMessage = result.Count() > 0 ? null : "Search Complete! No Record found"
                    }
                };
                return(response);
            }
Пример #2
0
        public async Task <BidAndTenderRespObj> Handle(GetAvailableBidsQuery request, CancellationToken cancellationToken)
        {
            var result = await _repo.GetAllBidAndTender();

            var statusPendingList = result.Where(s => s.ApprovalStatusId == (int)ApprovalStatus.Pending);
            CompanyStructureRespObj _Department = new CompanyStructureRespObj();

            _Department = await _serverRequest.GetAllCompanyStructureAsync();

            return(new BidAndTenderRespObj
            {
                BidAndTenders = result.Where(a => a.ApprovalStatusId != (int)ApprovalStatus.Disapproved && (int)ApprovalStatus.Authorised != a.ApprovalStatusId && a.SupplierId != 0).OrderByDescending(q => q.BidAndTenderId).Select(d => new BidAndTenderObj
                {
                    BidAndTenderId = d.BidAndTenderId,
                    AmountApproved = d.AmountApproved,
                    DateSubmitted = d.DateSubmitted,
                    DecisionResult = d.DecisionResult,
                    DescriptionOfRequest = d?.DescriptionOfRequest,
                    Location = d?.Location,
                    LPOnumber = d?.LPOnumber,
                    ProposedAmount = d.ProposedAmount.ToString(),
                    RequestDate = d.RequestDate,
                    RequestingDepartment = d.RequestingDepartment,
                    SupplierName = d?.SupplierName,
                    Suppliernumber = d?.Suppliernumber,
                    DecisionReultName = Convert.ToString((DecisionResult)d.DecisionResult),
                    Quantity = d.Quantity,
                    Total = d.Total,
                    ApprovalStatusId = d.ApprovalStatusId,
                    SupplierId = d.SupplierId,
                    WorkflowToken = d.WorkflowToken,
                    ProposalTenderUploadType = d.ProposalTenderUploadType,
                    ProposalTenderUploadPath = d.ProposalTenderUploadPath,
                    ProposalTenderUploadName = d.ProposalTenderUploadName,
                    ProposalTenderUploadFullPath = d.ProposalTenderUploadFullPath,
                    ExpectedDeliveryDate = d.ExpectedDeliveryDate,
                    StatusName = Convert.ToString((ApprovalStatus)d.ApprovalStatusId),
                    RequestingDepartmentName = _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name,
                }).ToList() ?? new List <BidAndTenderObj>(),
                Status = new APIResponseStatus
                {
                    IsSuccessful = true,
                    Message = new APIResponseMessage
                    {
                        FriendlyMessage = result.Count() > 0 ? null : "Search Complete! No Record found"
                    }
                }
            });
        }
Пример #3
0
        public async Task <BidAndTenderRespObj> Handle(GetSupplierAdvertsNotBiddenForQuery request, CancellationToken cancellationToken)
        {
            var response = new BidAndTenderRespObj {
                Status = new APIResponseStatus {
                    Message = new APIResponseMessage()
                }
            };


            CompanyStructureRespObj _Department = new CompanyStructureRespObj();

            var resp = new List <BidAndTenderObj>();

            _Department = await _serverRequest.GetAllCompanyStructureAsync();

            var domainList = _dataContext.cor_bid_and_tender.ToList().GroupBy(w => w.BidAndTenderId).Select(q => q.First()).Where(r => r.ApprovalStatusId == (int)ApprovalStatus.Awaiting).ToArray();

            response.BidAndTenders = domainList?.OrderByDescending(a => a.BidAndTenderId).Where(r => r.ApprovalStatusId == (int)ApprovalStatus.Awaiting && r.SupplierId == 0)
                                     .Select(d => new BidAndTenderObj
            {
                BidAndTenderId       = d.BidAndTenderId,
                AmountApproved       = d.AmountApproved,
                DateSubmitted        = d.DateSubmitted,
                DecisionResult       = d.DecisionResult,
                DescriptionOfRequest = d?.DescriptionOfRequest,
                Location             = d?.Location,
                LPOnumber            = d?.LPOnumber,
                ExpectedDeliveryDate = d.ExpectedDeliveryDate,
                RequestDate          = d.RequestDate,
                RequestingDepartment = d.RequestingDepartment,
                SupplierName         = d?.SupplierName,
                Suppliernumber       = d?.Suppliernumber,
                Quantity             = d.Quantity,
                Total                    = d.Total,
                ApprovalStatusId         = d.ApprovalStatusId,
                SupplierId               = d.SupplierId,
                WorkflowToken            = d.WorkflowToken,
                Comment                  = d.Comment,
                SupplierAddress          = d.SupplierAddress,
                RequestingDepartmentName = d.RequestingDepartment > 0? _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name : string.Empty,
                PLPOId                   = d.PLPOId,
                PRNId                    = d.PurchaseReqNoteId,
            }).ToList() ?? new List <BidAndTenderObj>();

            return(response);
        }
Пример #4
0
        public async Task <RequisitionNoteRespObj> Handle(GetAllPRNQuery request, CancellationToken cancellationToken)
        {
            var prn = await _repo.GetAllPurchaseRequisitionNoteAsync();

            var _Department = await _serverRequest.GetAllCompanyStructureAsync();

            var user = await _serverRequest.UserDataAsync();

            return(new RequisitionNoteRespObj
            {
                RequisitionNotes = prn.Where(q => q.StaffId == user.StaffId).OrderByDescending(r => r.PurchaseReqNoteId).Select(d => new RequisitionNoteObj
                {
                    ApprovalStatusId = d.ApprovalStatusId,
                    Comment = d.Comment,
                    DeliveryLocation = d.DeliveryLocation,
                    DepartmentId = d.DepartmentId,
                    Description = d.Description,
                    DocumentNumber = d.DocumentNumber,
                    ExpectedDeliveryDate = d.ExpectedDeliveryDate,
                    IsFundAvailable = d.IsFundAvailable,
                    PurchaseReqNoteId = d.PurchaseReqNoteId,
                    RequestBy = d.RequestBy,
                    StatusName = Convert.ToString((ApprovalStatus)d.ApprovalStatusId),
                    Total = d.Total,
                    WorkflowToken = d.WorkflowToken,
                    RequestDate = d.CreatedOn,
                    PRNNumber = d.PRNNumber,
                    DepartmentName = _Department.companyStructures.FirstOrDefault(c => c.CompanyStructureId == d.DepartmentId)?.Name,
                    DetailsCount = d.purch_prndetails.Count()
                }).ToList(),
                Status = new APIResponseStatus
                {
                    IsSuccessful = true,
                    Message = new APIResponseMessage
                    {
                        FriendlyMessage = prn.Count() < 1 ? "No PRN awaiting approvals" : null
                    }
                }
            });
        }
            public async Task <ProposalPaymentRespObj> Handle(GetRequestedPaymentsAwaitingApprovalQuery request, CancellationToken cancellationToken)
            {
                try
                {
                    var result = await _serverRequest.GetAnApproverItemsFromIdentityServer();

                    if (!result.IsSuccessStatusCode)
                    {
                        var data1 = await result.Content.ReadAsStringAsync();

                        var res1 = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data1);
                        return(new ProposalPaymentRespObj
                        {
                            Status = new APIResponseStatus
                            {
                                IsSuccessful = false,
                                Message = new APIResponseMessage {
                                    FriendlyMessage = $"{result.ReasonPhrase} {result.StatusCode}"
                                }
                            }
                        });
                    }

                    var data = await result.Content.ReadAsStringAsync();

                    var res = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data);

                    if (res == null)
                    {
                        return(new ProposalPaymentRespObj
                        {
                            Status = res.Status
                        });
                    }

                    if (res.workflowTasks.Count() < 1)
                    {
                        return(new ProposalPaymentRespObj
                        {
                            Status = new APIResponseStatus
                            {
                                IsSuccessful = true,
                                Message = new APIResponseMessage
                                {
                                    FriendlyMessage = "No Pending Approval"
                                }
                            }
                        });
                    }
                    CompanyStructureRespObj _Department = new CompanyStructureRespObj();
                    _Department = await _serverRequest.GetAllCompanyStructureAsync();

                    var paymentTerms = await _repo.GetPaymenttermsAsync();

                    var bids = await _repo.GetAllBidAndTender();

                    var staffRequestedPaymentsawaiting = await _repo.GetRequestedPaymentsAwaitingApprovalAsync(res.workflowTasks.Select(x => x.TargetId).ToList(), res.workflowTasks.Select(s => s.WorkflowToken).ToList());

                    //var RequestedPaymentss = await _repo.GetAllPurchaseRequisitionNoteAsync();


                    var payments = staffRequestedPaymentsawaiting.Select(d => new ProposalPayment
                    {
                        PaymentTermId            = d.PaymentTermId,
                        Completion               = d.Completion,
                        Amount                   = d.Amount,
                        NetAmount                = d.NetAmount,
                        Payment                  = d.Payment,
                        PaymentStatus            = d.PaymentStatus,
                        PaymentStatusName        = Convert.ToString(d.PaymentStatus),
                        Phase                    = d.Phase,
                        PhaseName                = Convert.ToString((PaymentTermsPhase)d.Phase),
                        ProjectStatusDescription = d.ProjectStatusDescription,
                        Status                   = d.Status,
                        StatusName               = Convert.ToString((JobProgressStatus)d.Status),
                        Comment                  = d.Comment,
                        AmountPaid               = 0,
                        LPOId                    = d.LPOId,
                        AmountPayable            = d.NetAmount,
                        PaymentOutstanding       = d.NetAmount,
                    }).ToList();

                    if (payments.Count() > 0)
                    {
                        foreach (var item in payments)
                        {
                            var alreadyPaidPhases = _dataContext.cor_paymentterms.Where(a => a.LPOId == item.LPOId && a.ProposedBy == (int)Proposer.STAFF && a.PaymentStatus == (int)PaymentStatus.Paid).ToList();
                            if (alreadyPaidPhases.Count() > 0)
                            {
                                item.AmountPaid         = alreadyPaidPhases.Sum(f => f.NetAmount);
                                item.PaymentOutstanding = (item.AmountPayable - alreadyPaidPhases.Sum(f => f.NetAmount));
                            }
                        }
                    }
                    return(new ProposalPaymentRespObj
                    {
                        ProposalPayment = payments,
                        Status = new APIResponseStatus
                        {
                            IsSuccessful = true,
                            Message = new APIResponseMessage {
                                FriendlyMessage = staffRequestedPaymentsawaiting.Count() > 0 ? "" : "Search Complete : No Payment awaitingt approvals"
                            }
                        }
                    });
                }
                catch (SqlException ex)
                {
                    throw ex;
                }
            }
        public async Task <BidAndTenderRespObj> Handle(GetBidAndTenderByIdQuery request, CancellationToken cancellationToken)
        {
            CompanyStructureRespObj _Department = new CompanyStructureRespObj();

            _Department = await _serverRequest.GetAllCompanyStructureAsync();

            var d = await _repo.GetBidAndTender(request.BidAndTenderID);

            var prn = await _repo.GetAllPurchaseRequisitionNoteAsync();

            var itemList = new List <BidAndTenderObj>();

            if (d != null)
            {
                var item = new BidAndTenderObj
                {
                    BidAndTenderId               = d.BidAndTenderId,
                    AmountApproved               = d.AmountApproved,
                    DateSubmitted                = d.DateSubmitted,
                    DecisionResult               = d.DecisionResult,
                    DescriptionOfRequest         = d?.DescriptionOfRequest,
                    Location                     = d?.Location,
                    LPOnumber                    = d?.LPOnumber,
                    ProposalTenderUploadType     = d.ProposalTenderUploadType,
                    ProposalTenderUploadPath     = d.ProposalTenderUploadPath,
                    ProposalTenderUploadName     = d.ProposalTenderUploadName,
                    ProposalTenderUploadFullPath = d.ProposalTenderUploadFullPath,
                    ExpectedDeliveryDate         = d.ExpectedDeliveryDate,
                    ProposedAmount               = d.ProposedAmount.ToString(),
                    RequestDate                  = d.RequestDate,
                    RequestingDepartment         = d.RequestingDepartment,
                    SupplierName                 = d?.SupplierName,
                    Suppliernumber               = d?.Suppliernumber,
                    Quantity                     = d.Quantity,
                    Total            = d.Total,
                    PLPOId           = d.PLPOId,
                    Comment          = d.Comment,
                    SupplierId       = d.SupplierId,
                    WorkflowToken    = d.WorkflowToken,
                    RequisitionNotes = prn.Where(a => a.PurchaseReqNoteId == d.PurchaseReqNoteId).Select(v => new RequisitionNoteObj
                    {
                        ApprovalStatusId     = v.ApprovalStatusId,
                        Comment              = v.Comment,
                        DeliveryLocation     = v.DeliveryLocation,
                        DepartmentId         = v.DepartmentId,
                        Description          = v.Description,
                        DocumentNumber       = v.DocumentNumber,
                        ExpectedDeliveryDate = v.ExpectedDeliveryDate,
                        IsFundAvailable      = v.IsFundAvailable,
                        PurchaseReqNoteId    = v.PurchaseReqNoteId,
                        RequestBy            = v.RequestBy,
                        StatusName           = Convert.ToString((ApprovalStatus)v.ApprovalStatusId),
                        Total         = v.Total,
                        RequestDate   = v.CreatedOn,
                        WorkflowToken = v.WorkflowToken,
                        PRNNumber     = v.PRNNumber,

                        DetailsCount = v.purch_prndetails.Count(),
                    }).ToList(),
                    RequestingDepartmentName = _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name,
                    PaymentTerms             = d.Paymentterms.Select(b => new PaymentTermsObj {
                        BidAndTenderId = b.BidAndTenderId,
                        Comment        = b.Comment,
                        Completion     = b.Completion,
                        Amount         = b.Amount,
                        NetAmount      = b.NetAmount,
                        Payment        = b.Payment,
                        PaymentStatus  = b.PaymentStatus,
                        Phase          = b.Phase,
                        PaymentTermId  = b.PaymentTermId,
                        Status         = b.Status,

                        ProposedBy = b.ProposedBy,
                        ProjectStatusDescription = b.ProjectStatusDescription,
                    }).ToList(),
                };
                itemList.Add(item);
            }

            return(new BidAndTenderRespObj
            {
                BidAndTenders = itemList,
                Status = new APIResponseStatus
                {
                    IsSuccessful = true,
                    Message = new APIResponseMessage
                    {
                        FriendlyMessage = itemList.Count() > 0 ? null : "Search Complete! No Record found"
                    }
                }
            });
        }
            public async Task <PaymentTermsRegRespObj> Handle(SendPaymentInvoiceToApprovalCommand request, CancellationToken cancellationToken)
            {
                var apiResponse = new PaymentTermsRegRespObj {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage()
                    }
                };

                try
                {
                    var paymentprop = await _repo.GetSinglePaymenttermAsync(request.PaymentTermId);

                    if (paymentprop == null)
                    {
                        apiResponse.Status.Message.FriendlyMessage = $"Proposal Not found";
                        return(apiResponse);
                    }
                    if (paymentprop.PaymentStatus == (int)PaymentStatus.Paid)
                    {
                        apiResponse.Status.Message.FriendlyMessage = "Payment already made for this phase";
                        return(apiResponse);
                    }
                    if (paymentprop.ApprovalStatusId == (int)ApprovalStatus.Processing)
                    {
                        apiResponse.Status.Message.FriendlyMessage = "Payment In Process";
                        return(apiResponse);
                    }
                    var invoice = await _invoice.GetInvoiceByPhaseAsync(paymentprop.PaymentTermId);

                    if (invoice == null)
                    {
                        apiResponse.Status.Message.FriendlyMessage = "Invoice not found";
                        return(apiResponse);
                    }

                    if (invoice.ApprovalStatusId != (int)ApprovalStatus.Approved)
                    {
                        if (invoice.ApprovalStatusId != (int)ApprovalStatus.Pending)
                        {
                            apiResponse.Status.Message.FriendlyMessage = $"Unable to push invoice with status '{Convert.ToString((ApprovalStatus)invoice.ApprovalStatusId)}' for approval";
                            return(apiResponse);
                        }
                    }
                    var companies = await _serverRequest.GetAllCompanyStructureAsync();

                    var currentCompanyCurrency = companies.companyStructures.FirstOrDefault(q => q.CompanyStructureId == invoice.CompanyId);
                    if (currentCompanyCurrency == null)
                    {
                        apiResponse.Status.Message.FriendlyMessage = "Unable to Identify Company";
                        return(apiResponse);
                    }
                    invoice.CurrencyId = currentCompanyCurrency.ReportCurrencyId ?? 0;

                    invoice.PaymentBankId  = request.PaymentBankId;
                    invoice.SupplierBankId = request.SupplierBankId;
                    var user = await _serverRequest.UserDataAsync();

                    using (var _transaction = await _dataContext.Database.BeginTransactionAsync())
                    {
                        try
                        {
                            var targetList = new List <int>();
                            targetList.Add(invoice.InvoiceId);
                            GoForApprovalRequest wfRequest = new GoForApprovalRequest
                            {
                                Comment                = "Invoice Payment Phase",
                                OperationId            = (int)OperationsEnum.PaymentApproval,
                                TargetId               = targetList,
                                ApprovalStatus         = (int)ApprovalStatus.Pending,
                                DeferredExecution      = true,
                                StaffId                = user.StaffId,
                                CompanyId              = user.CompanyId,
                                EmailNotification      = true,
                                ExternalInitialization = false,
                                StatusId               = (int)ApprovalStatus.Processing,
                            };

                            var result = await _serverRequest.GotForApprovalAsync(wfRequest);

                            if (!result.IsSuccessStatusCode)
                            {
                                apiResponse.Status.Message.FriendlyMessage = $"{result.ReasonPhrase} {result.StatusCode}";
                                return(apiResponse);
                            }
                            var stringData = await result.Content.ReadAsStringAsync();

                            GoForApprovalRespObj res = JsonConvert.DeserializeObject <GoForApprovalRespObj>(stringData);

                            if (res.ApprovalProcessStarted)
                            {
                                invoice.ApprovalStatusId     = (int)ApprovalStatus.Processing;
                                invoice.WorkflowToken        = res.Status.CustomToken;
                                paymentprop.ApprovalStatusId = (int)ApprovalStatus.Processing;
                                await _repo.AddUpdatePaymentTermsAsync(paymentprop);

                                await _invoice.CreateUpdateInvoiceAsync(invoice);

                                await _transaction.CommitAsync();

                                apiResponse.PaymentTermId = invoice.PaymentTermId;
                                apiResponse.Status        = res.Status;
                                return(apiResponse);
                            }

                            if (res.EnableWorkflow || !res.HasWorkflowAccess)
                            {
                                await _transaction.RollbackAsync();

                                apiResponse.Status.Message = res.Status.Message;
                                return(apiResponse);
                            }

                            if (!res.EnableWorkflow)
                            {
                                invoice.ApprovalStatusId = (int)ApprovalStatus.Approved;

                                var thisInvoicePhase = await _repo.GetSinglePaymenttermAsync(invoice.PaymentTermId);

                                thisInvoicePhase.PaymentStatus    = (int)PaymentStatus.Paid;
                                thisInvoicePhase.CompletionDate   = DateTime.Now;
                                thisInvoicePhase.ApprovalStatusId = (int)ApprovalStatus.Approved;

                                var paymentResp = await _invoice.TransferPaymentAsync(invoice);

                                if (!paymentResp.Status.IsSuccessful)
                                {
                                    await _transaction.RollbackAsync();

                                    apiResponse.Status.IsSuccessful            = false;
                                    apiResponse.Status.Message.FriendlyMessage = paymentResp.Status.Message.FriendlyMessage;
                                    return(apiResponse);
                                }
                                await _repo.AddUpdatePaymentTermsAsync(thisInvoicePhase);

                                invoice.AmountPaid = invoice.Amount;
                                await _invoice.CreateUpdateInvoiceAsync(invoice);

                                var entryRequest = _invoice.BuildSupplierSecondEntryRequestObject(invoice);
                                var entry        = await _financeServer.PassEntryAsync(entryRequest);

                                if (!entry.Status.IsSuccessful)
                                {
                                    await _transaction.RollbackAsync();

                                    apiResponse.Status.IsSuccessful            = false;
                                    apiResponse.Status.Message.FriendlyMessage = $"{entry.Status.Message.FriendlyMessage}";
                                    return(apiResponse);
                                }
                                await _repo.SendEmailToSupplierDetailingPaymentAsync(invoice, thisInvoicePhase.Phase);

                                await _transaction.CommitAsync();

                                apiResponse.Status.IsSuccessful            = true;
                                apiResponse.Status.Message.FriendlyMessage = $"Payment Successful";
                                return(apiResponse);
                            }
                            apiResponse.Status = res.Status;
                            return(apiResponse);
                        }
                        catch (Exception ex)
                        {
                            await _transaction.RollbackAsync();

                            #region Log error to file
                            var errorCode = ErrorID.Generate(4);
                            _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                            return(new PaymentTermsRegRespObj
                            {
                                Status = new APIResponseStatus
                                {
                                    Message = new APIResponseMessage
                                    {
                                        FriendlyMessage = "Error occured!! Please try again later",
                                        MessageId = errorCode,
                                        TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"
                                    }
                                }
                            });

                            #endregion
                        }
                        finally { await _transaction.DisposeAsync(); }
                    }
                }
                catch (Exception ex)
                {
                    #region Log error to file
                    var errorCode = ErrorID.Generate(4);
                    _logger.Error($"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}");
                    return(new PaymentTermsRegRespObj
                    {
                        Status = new APIResponseStatus
                        {
                            Message = new APIResponseMessage
                            {
                                FriendlyMessage = "Error occured!! Please try again later",
                                MessageId = errorCode,
                                TechnicalMessage = $"ErrorID : {errorCode} Ex : {ex?.Message ?? ex?.InnerException?.Message} ErrorStack : {ex?.StackTrace}"
                            }
                        }
                    });

                    #endregion
                }
            }
Пример #8
0
            public async Task <LPOReport> Handle(LPOReportQuery request, CancellationToken cancellationToken)
            {
                var response = new LPOReport
                {
                    Phases      = new List <Phases>(),
                    ServiceTerm = new ServiceTerm(),
                    From        = new From(),
                    To          = new To(),
                    Status      = new APIResponseStatus {
                        Message = new APIResponseMessage(), IsSuccessful = true,
                    },
                };

                try
                {
                    var staff = await _serverRequest.GetAllStaffAsync();

                    var lpo = _dataContext.purch_plpo.FirstOrDefault(q => q.PLPOId == request.LPOId);
                    var prn = _dataContext.purch_requisitionnote.FirstOrDefault(q => q.PurchaseReqNoteId == lpo.PurchaseReqNoteId);

                    var serviceterms = _dataContext.cor_serviceterms.Where(q => q.ServiceTermsId == lpo.ServiceTerm).Select(w => new ServiceTerm
                    {
                        Content = w.Content,
                        Header  = w.Header
                    }).ToList() ?? new List <ServiceTerm>();

                    var phases = _dataContext.cor_paymentterms.Where(w => w.LPOId == lpo.PLPOId && w.ProposedBy == (int)Proposer.STAFF).Select(w => new Phases
                    {
                        Amount = w.Amount,
                        Tax    = w.TaxPercent,
                        Phase  = w.Phase
                    }).ToList();

                    var companies = await _serverRequest.GetAllCompanyStructureAsync();

                    var to = companies.companyStructures.Where(e => e.ParentCompanyID == 0).Select(r => new To {
                        Address = r.Address1,
                        Name    = r.Name,
                        Number  = r.Telephone
                    }).ToList();

                    var from = _dataContext.cor_supplier.Where(q => q.SupplierId == lpo.WinnerSupplierId).Select(s => new From
                    {
                        SupplierId = s.SupplierId,
                        Address    = s.Address,
                        Name       = s.Name,
                        Number     = s.SupplierNumber
                    }).ToList();

                    response.AmountPayable = lpo.AmountPayable;
                    response.GrossAmount   = lpo.GrossAmount;
                    response.LPONumber     = lpo.LPONumber;
                    response.Quantity      = lpo.Quantity;
                    response.RequestDate   = lpo.RequestDate;
                    response.TaxAmount     = lpo.Tax;
                    response.From          = from.FirstOrDefault();
                    response.ServiceTerm   = serviceterms.FirstOrDefault();
                    response.Phases        = phases;
                    response.Description   = lpo.Description;
                    response.Tax           = lpo.Tax;
                    response.To            = to.FirstOrDefault();

                    return(response);
                }
                catch (Exception ex)
                {
                    response.Status.IsSuccessful            = false;
                    response.Status.Message.FriendlyMessage = ex.Message;
                    return(response);
                }
            }
Пример #9
0
        public async Task <BidAndTenderRespObj> Handle(GetBidAndTenderAwaitingApprovalQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var response = new BidAndTenderRespObj {
                    Status = new APIResponseStatus {
                        Message = new APIResponseMessage()
                    }
                };

                CompanyStructureRespObj _Department = new CompanyStructureRespObj();
                _Department = await _serverRequest.GetAllCompanyStructureAsync();

                var result = await _serverRequest.GetAnApproverItemsFromIdentityServer();

                if (!result.IsSuccessStatusCode)
                {
                    var data1 = await result.Content.ReadAsStringAsync();

                    var res1 = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data1);
                    response.Status.IsSuccessful            = false;
                    response.Status.Message.FriendlyMessage = $"{result.ReasonPhrase} {result.StatusCode}";
                    return(response);
                }

                var data = await result.Content.ReadAsStringAsync();

                var res = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data);

                if (res == null)
                {
                    response.Status = res.Status;
                    return(response);
                }

                if (res.workflowTasks.Count() < 1)
                {
                    response.Status.IsSuccessful            = true;
                    response.Status.Message.FriendlyMessage = "No Pending Approval";
                    return(response);
                }
                var staffBidawaiting = await _repo.GetBidAndTenderAwaitingApprovalAsync(res.workflowTasks.Select(x => x.TargetId).ToList(), res.workflowTasks.Select(s => s.WorkflowToken).ToList());

                var paymentTerms = await _repo.GetPaymenttermsAsync();

                var requisitions = await _repo.GetAllPurchaseRequisitionNoteAsync();

                response.BidAndTenders = staffBidawaiting?.Where(w => w.ApprovalStatusId != (int)ApprovalStatus.Disapproved).Select(d => new BidAndTenderObj
                {
                    BidAndTenderId               = d.BidAndTenderId,
                    AmountApproved               = d.AmountApproved,
                    DateSubmitted                = d.DateSubmitted,
                    DecisionResult               = d.DecisionResult,
                    DescriptionOfRequest         = d?.DescriptionOfRequest,
                    Location                     = d?.Location,
                    LPOnumber                    = d?.LPOnumber,
                    ProposalTenderUploadType     = d.ProposalTenderUploadType,
                    ProposalTenderUploadPath     = d.ProposalTenderUploadPath,
                    ProposalTenderUploadName     = d.ProposalTenderUploadName,
                    ProposalTenderUploadFullPath = d.ProposalTenderUploadFullPath,
                    ProposedAmount               = d.ProposedAmount.ToString(),
                    RequestDate                  = d.RequestDate,
                    RequestingDepartment         = d.RequestingDepartment,
                    SupplierName                 = d?.SupplierName,
                    Suppliernumber               = d?.Suppliernumber,
                    DecisionReultName            = Convert.ToString((DecisionResult)d.DecisionResult),
                    Quantity                     = d.Quantity,
                    SupplierId                   = d.SupplierId,
                    PLPOId                   = d.PLPOId,
                    Total                    = d.Total,
                    ApprovalStatusId         = d.ApprovalStatusId,
                    WorkflowToken            = d.WorkflowToken,
                    ExpectedDeliveryDate     = d.ExpectedDeliveryDate,
                    SupplierAddress          = d.SupplierAddress,
                    PRNId                    = d.PurchaseReqNoteId,
                    RequestingDepartmentName = _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name,
                    RequisitionNotes         = _dataContext.purch_requisitionnote.Where(q => q.PurchaseReqNoteId == d.PurchaseReqNoteId).Select(w => new RequisitionNoteObj {
                        PurchaseReqNoteId    = w.PurchaseReqNoteId,
                        ApprovalStatusId     = w.ApprovalStatusId,
                        Comment              = w.Comment,
                        DeliveryLocation     = w.DeliveryLocation,
                        DepartmentId         = w.DepartmentId,
                        Description          = w.Description,
                        DocumentNumber       = w.DocumentNumber,
                        ExpectedDeliveryDate = w.ExpectedDeliveryDate,
                        IsFundAvailable      = w.IsFundAvailable,
                        PRNNumber            = w.PRNNumber,
                        Total       = w.Total,
                        RequestDate = w.CreatedOn,
                        RequestBy   = w.RequestBy,
                        StatusName  = Convert.ToString((ApprovalStatus)d.ApprovalStatusId),
                    }).ToList(),
                    PaymentTerms = paymentTerms.Where(s => s.BidAndTenderId == d.BidAndTenderId).Select(a => new PaymentTermsObj
                    {
                        BidAndTenderId           = a.BidAndTenderId,
                        Comment                  = a.Comment,
                        Completion               = a.Completion,
                        Amount                   = a.Amount,
                        NetAmount                = a.NetAmount,
                        Payment                  = a.Payment,
                        PaymentStatus            = a.PaymentStatus,
                        PaymentStatusName        = Convert.ToString((PaymentStatus)a.PaymentStatus),
                        PaymentTermId            = a.PaymentTermId,
                        Phase                    = a.Phase,
                        ProjectStatusDescription = a.ProjectStatusDescription,
                        Status                   = a.Status,
                        ProposedBy               = a.ProposedBy,

                        StatusName = Convert.ToString((JobProgressStatus)a.Status),
                    }).ToList(),
                }).ToList() ?? new List <BidAndTenderObj>();

                response.Status = new APIResponseStatus
                {
                    IsSuccessful = true,
                    Message      = new APIResponseMessage
                    {
                        FriendlyMessage = staffBidawaiting.Count() > 0 ? null : "Search Complete! No Record found"
                    }
                };


                return(response);
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
Пример #10
0
        public async Task <PurchAndPayaReportResp> Handle(PurchaseAndPayablesReportQuery request, CancellationToken cancellationToken)
        {
            var response = new PurchAndPayaReportResp
            {
                PurchAndsPayables = new List <PurchAndPayaReport>(),
                Staus             = new APIResponseStatus {
                    IsSuccessful = true, Message = new APIResponseMessage()
                }
            };

            try
            {
                if (string.IsNullOrEmpty(request.LPONumber))
                {
                    response.Staus.Message.FriendlyMessage = "LPO Number Required to pull report";
                    response.Staus.IsSuccessful            = false;
                    return(response);
                }

                var user = await _serverRequest.UserDataAsync();

                var comp = await _serverRequest.GetAllCompanyStructureAsync();

                var responseList = new List <PurchAndPayaReport>();
                var result       = (from a in _dataContext.purch_plpo
                                    join b in _dataContext.purch_requisitionnote on a.PurchaseReqNoteId equals b.PurchaseReqNoteId
                                    join c in _dataContext.inv_invoice on a.PLPOId equals c.LPOId
                                    join e in _dataContext.cor_supplier on c.SupplierId equals e.SupplierId
                                    select new PurchAndPayaReport
                {
                    LPONumber = a.LPONumber,
                    Description = a.Description,
                    RequestDate = a.RequestDate,
                    SupplierId = e.SupplierId,
                    SupplierName = e.Name,
                    ExpectedDeleiveryDate = b.ExpectedDeliveryDate.Value,
                    DeleiveryLocation = a.Address,
                    AmountPayable = a.AmountPayable,
                    AmountPaid = c.AmountPaid,
                    OutStandingAmount = (c.Amount - c.AmountPaid),
                    LPOId = a.PLPOId,
                    DepartmentId = b.DepartmentId,
                    SupplierLocation = e.Address,
                    Department = b.DepartmentId,
                    RequisitionDate = a.RequestDate
                }).ToList();


                if (result.Count() > 0)
                {
                    result = result.Where(r => r.LPONumber == request.LPONumber).ToList();
                    responseList.AddRange(result);
                    foreach (var item in result)
                    {
                        item.DepartmentName = comp.companyStructures.FirstOrDefault(r => r.CompanyStructureId == item.DepartmentId)?.Name;
                    }

                    if (!string.IsNullOrEmpty(request.ItemDescription))
                    {
                        var descs = result.Where(r => r.Description == request.ItemDescription).ToList();
                        if (descs.Count() > 0)
                        {
                            responseList.AddRange(descs);
                        }
                    }
                    if (string.IsNullOrEmpty(request.SupplierLocation))
                    {
                        var loca = result.Where(r => r.SupplierLocation == request.SupplierLocation).ToList();
                        if (loca.Count() > 0)
                        {
                            responseList.AddRange(loca);
                        }
                    }
                    if (string.IsNullOrEmpty(request.DeleiveryLocation))
                    {
                        var deLoc = result.Where(r => r.DeleiveryLocation == request.DeleiveryLocation).ToList();
                        if (deLoc.Count() > 0)
                        {
                            responseList.AddRange(deLoc);
                        }
                    }
                    if (request.RequisitionDate != null)
                    {
                        var reqDate = result.Where(r => r.RequisitionDate == request.RequisitionDate).ToList();
                        if (reqDate.Count() > 0)
                        {
                            responseList.AddRange(reqDate);
                        }
                    }
                    if (request.Department > 0)
                    {
                        var dept = result.Where(r => r.Department == request.Department).ToList();
                        if (dept.Count() > 0)
                        {
                            responseList.AddRange(dept);
                        }
                    }
                    if (request.AmountPayable != 0)
                    {
                        var amtPaya = result.Where(r => r.AmountPayable == request.AmountPayable).ToList();
                        if (amtPaya.Count() > 0)
                        {
                            responseList.AddRange(amtPaya);
                        }
                    }
                    if (request.ExpectedDeleiveryDate != null)
                    {
                        var exp = result.Where(r => r.ExpectedDeleiveryDate == request.ExpectedDeleiveryDate).ToList();
                        if (exp.Count() > 0)
                        {
                            responseList.AddRange(exp);
                        }
                    }
                    if (request.AmountPaid != 0)
                    {
                        var paid = result.Where(r => r.AmountPaid == request.AmountPaid).ToList();
                        if (paid.Count() > 0)
                        {
                            responseList.AddRange(paid);
                        }
                    }
                    if (request.OutStandingAmount != 0)
                    {
                        //foreach (var item in result)
                        //{
                        //    item.OutStandingAmount = item.AmountPayable - item.AmountPaid;
                        //}
                        //responseList.AddRange(result.Where(r => r.AmountPaid == request.AmountPaid).ToList());
                    }
                }

                //if(result.Count() > 0)
                // {
                //     //foreach (var item in result)
                //     //{
                //     //    item.SubStrucure = comp.companyStructures.FirstOrDefault(r => r.CompanyStructureId == Convert.ToInt64(user.CompanyId))?.Name;
                //     //    item.Total = item.LPOReports.Select(r => r.GrossAmount).ToList().Sum();
                //     //    item.NumberOfLPO = item.LPOReports.Select(r => r.GrossAmount).ToList().Count();
                //     //    foreach (var sub in item.LPOReports)
                //     //    {
                //     //        sub.DepartmentName = comp.companyStructures.FirstOrDefault(r => r.CompanyStructureId == sub.DepartmentId)?.Name;
                //     //    }
                //     //}
                // }
                response.PurchAndsPayables = responseList;
                return(response);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <LPORespObj> Handle(GetLPOAwaitingApprovalQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var result = await _serverRequest.GetAnApproverItemsFromIdentityServer();

                if (!result.IsSuccessStatusCode)
                {
                    var data1 = await result.Content.ReadAsStringAsync();

                    var res1 = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data1);
                    return(new LPORespObj
                    {
                        Status = new APIResponseStatus
                        {
                            IsSuccessful = false,
                            Message = new APIResponseMessage {
                                FriendlyMessage = $"{result.ReasonPhrase} {result.StatusCode}"
                            }
                        }
                    });
                }

                var data = await result.Content.ReadAsStringAsync();

                var res = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data);

                if (res == null)
                {
                    return(new LPORespObj
                    {
                        Status = res.Status
                    });
                }

                if (res.workflowTasks.Count() < 1)
                {
                    return(new LPORespObj
                    {
                        Status = new APIResponseStatus
                        {
                            IsSuccessful = true,
                            Message = new APIResponseMessage
                            {
                                FriendlyMessage = "No Pending Approval"
                            }
                        }
                    });
                }

                CompanyStructureRespObj _Department = new CompanyStructureRespObj();
                _Department = await _serverRequest.GetAllCompanyStructureAsync();

                var paymentTerms = await _repo.GetPaymenttermsAsync();

                var bids = await _repo.GetAllBidAndTender();

                var staffLPOawaiting = await _repo.GetLPOAwaitingApprovalAsync(res.workflowTasks.Select(x => x.TargetId).ToList(), res.workflowTasks.Select(s => s.WorkflowToken).ToList());

                var lpos = await _repo.GetAllPurchaseRequisitionNoteAsync();

                return(new LPORespObj
                {
                    LPOs = staffLPOawaiting?.Select(d => new LPOObj
                    {
                        AmountPayable = d.AmountPayable,
                        ApprovalStatusId = d.ApprovalStatusId,
                        BidAndTenderId = d.BidAndTenderId,
                        DeliveryDate = d.DeliveryDate,
                        Description = d.Description,
                        GrossAmount = d.GrossAmount,
                        JobStatus = d.JobStatus,
                        JobStatusName = Convert.ToString((JobProgressStatus)d.JobStatus),
                        LPONumber = d.LPONumber,
                        Name = d.Name,
                        PLPOId = d.PLPOId,
                        RequestDate = d.RequestDate,
                        SupplierAddress = d.SupplierAddress,
                        SupplierId = d.SupplierIds,
                        SupplierNumber = d.SupplierNumber,
                        Tax = d.Tax,
                        Total = d.Total,
                        WorkflowToken = d.WorkflowToken,
                        WinnerSupplierId = d.WinnerSupplierId,
                        BidAndTender = bids.Where(w => w.BidAndTenderId == d.BidAndTenderId).Select(s => new BidAndTenderObj
                        {
                            BidAndTenderId = s.BidAndTenderId,
                            AmountApproved = s.AmountApproved,
                            ApprovalStatusId = s.ApprovalStatusId,
                            DateSubmitted = s.DateSubmitted,
                            DecisionResult = s.DecisionResult,
                            DecisionReultName = Convert.ToString((DecisionResult)s.DecisionResult),
                            DescriptionOfRequest = s.DescriptionOfRequest,
                            ExpectedDeliveryDate = s.ExpectedDeliveryDate,
                            Location = s.Location,
                            LPOnumber = s.LPOnumber,
                            PLPOId = s.PLPOId,
                            PRNId = s.PLPOId,
                            ProposedAmount = s.ProposedAmount.ToString(),
                            Quantity = s.Quantity,
                            RequestDate = s.RequestDate,
                            RequestingDepartmentName = _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == s.RequestingDepartment)?.Name,
                            SupplierAddress = s.SupplierAddress,
                            Suppliernumber = s.Suppliernumber,
                            SupplierName = s.SupplierName,
                            Total = s.Total,
                        }).ToList(),
                        RequisitionNotes = lpos.Where(w => w.PurchaseReqNoteId == d.PurchaseReqNoteId).Select(q => new RequisitionNoteObj
                        {
                            PurchaseReqNoteId = q.PurchaseReqNoteId,
                            ApprovalStatusId = q.ApprovalStatusId,
                            Comment = q.Comment,
                            DeliveryLocation = q.DeliveryLocation,
                            DepartmentId = q.DepartmentId,
                            Description = q.Description,
                            DocumentNumber = q.DocumentNumber,
                            ExpectedDeliveryDate = q.ExpectedDeliveryDate,
                            IsFundAvailable = q.IsFundAvailable,
                            PRNNumber = q.PRNNumber,
                            RequestBy = q.RequestBy,
                            Total = q.Total,
                            RequestDate = q.CreatedOn,
                        }).ToList(),
                        PaymentTerms = paymentTerms.Where(e => e.BidAndTenderId == d.BidAndTenderId).Select(p => new PaymentTermsObj
                        {
                            BidAndTenderId = p.BidAndTenderId,
                            Comment = p.Comment,
                            Completion = p.Completion,
                            Amount = p.Amount,
                            NetAmount = p.NetAmount,
                            Payment = p.Payment,
                            PaymentStatus = p.PaymentStatus,
                            PaymentTermId = p.PaymentTermId,
                            Phase = p.Phase,
                            ProjectStatusDescription = p.ProjectStatusDescription,
                            Status = p.Status,
                            ProposedBy = p.ProposedBy,
                            StatusName = Convert.ToString((JobProgressStatus)p.Status),
                            PaymentStatusName = Convert.ToString((PaymentStatus)p.PaymentStatus),
                        }).ToList(),
                    }).ToList() ?? new List <LPOObj>(),
                    Status = new APIResponseStatus
                    {
                        IsSuccessful = true,
                        Message = new APIResponseMessage
                        {
                            FriendlyMessage = staffLPOawaiting.Count() > 0 ? null : "Search Complete! No Record found"
                        }
                    }
                });
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }
Пример #12
0
        public async Task <BidAndTenderRespObj> Handle(GetBidAndTenderQuery request, CancellationToken cancellationToken)
        {
            var response = new BidAndTenderRespObj {
                Status = new APIResponseStatus {
                    Message = new APIResponseMessage()
                }
            };
            var userid = _accessor.HttpContext.User?.FindFirst(a => a.Type == "userId")?.Value;
            var user   = await _userManager.FindByIdAsync(userid);

            var otherBids = await _dataContext.cor_bid_and_tender.Where(a => a.SupplierId == 0 && a.ApprovalStatusId == (int)ApprovalStatus.Awaiting).ToListAsync();

            var supDetail = await _dataContext.cor_supplier.FirstOrDefaultAsync(a => a.Email.Trim().ToLower() == user.Email.Trim().ToLower());

            var result = await _repo.GetAllSupplierBidAndTender(user.Email);

            CompanyStructureRespObj _Department = new CompanyStructureRespObj();
            var resp = new List <BidAndTenderObj>();

            _Department = await _serverRequest.GetAllCompanyStructureAsync();

            var domainList = new List <cor_bid_and_tender>();

            domainList.AddRange(result);

            if (otherBids.Count() > 0)
            {
                var nonSupplierBids = otherBids.Where(q => !q.SelectedSuppliers.Split(',').Select(int.Parse).ToList().Contains(supDetail.SupplierId)).ToList();
                if (nonSupplierBids.Count() > 0)
                {
                    foreach (var er in nonSupplierBids)
                    {
                        er.SupplierName   = supDetail.Name;
                        er.Suppliernumber = supDetail.SupplierNumber;
                        er.SupplierId     = supDetail.SupplierId;
                    }
                }
                domainList.AddRange(nonSupplierBids);
            }
            response.BidAndTenders = domainList?.OrderByDescending(a => a.BidAndTenderId).Where(r => r.ApprovalStatusId == (int)ApprovalStatus.Awaiting)
                                     .Select(d => new BidAndTenderObj
            {
                BidAndTenderId       = d.BidAndTenderId,
                AmountApproved       = d.AmountApproved,
                DateSubmitted        = d.DateSubmitted,
                DecisionResult       = d.DecisionResult,
                DescriptionOfRequest = d?.DescriptionOfRequest,
                Location             = d?.Location,
                LPOnumber            = d?.LPOnumber,
                ExpectedDeliveryDate = d.ExpectedDeliveryDate,
                RequestDate          = d.RequestDate,
                RequestingDepartment = d.RequestingDepartment,
                SupplierName         = d?.SupplierName,
                Suppliernumber       = d?.Suppliernumber,
                Quantity             = d.Quantity,
                Total                    = d.Total,
                ApprovalStatusId         = d.ApprovalStatusId,
                SupplierId               = d.SupplierId,
                WorkflowToken            = d.WorkflowToken,
                Comment                  = d.Comment,
                SupplierAddress          = d.SupplierAddress,
                RequestingDepartmentName = d.RequestingDepartment > 0? _Department.companyStructures.FirstOrDefault(e => e.CompanyStructureId == d.RequestingDepartment)?.Name : string.Empty,
                PLPOId                   = d.PLPOId,
                PRNId                    = d.PurchaseReqNoteId,
            }).ToList() ?? new List <BidAndTenderObj>();

            if (response.BidAndTenders.Count() > 0)
            {
                var biddenITem = _dataContext.cor_bid_and_tender.Where(q => q.SupplierId == supDetail.SupplierId && response.BidAndTenders.Select(s => s.PLPOId).Contains(q.PLPOId) && !string.IsNullOrEmpty(q.SelectedSuppliers)).ToList();
                if (biddenITem.Count() > 0)
                {
                    var lrespn = response.BidAndTenders.Except(response.BidAndTenders.Where(a => biddenITem.Select(w => w.PLPOId).Contains(a.PLPOId)).ToList());
                    response.BidAndTenders = lrespn.ToList();
                }
            }

            return(response);
        }
        public async Task <RequisitionNoteRespObj> Handle(GetAllPRNAwaitingApprovalQuery request, CancellationToken cancellationToken)
        {
            try
            {
                var apiResponse = new RequisitionNoteRespObj {
                    Status = new APIResponseStatus {
                        IsSuccessful = false, Message = new APIResponseMessage()
                    }
                };

                var result = await _serverRequest.GetAnApproverItemsFromIdentityServer();

                if (!result.IsSuccessStatusCode)
                {
                    apiResponse.Status.Message.FriendlyMessage = $"{result.ReasonPhrase} {result.StatusCode}";
                    return(apiResponse);
                }
                var data = await result.Content.ReadAsStringAsync();

                var res = JsonConvert.DeserializeObject <WorkflowTaskRespObj>(data);

                if (res == null)
                {
                    apiResponse.Status = res.Status;
                    return(apiResponse);
                }

                if (res.workflowTasks.Count() < 1)
                {
                    apiResponse.Status.IsSuccessful            = true;
                    apiResponse.Status.Message.FriendlyMessage = "No Pending Approval";
                    return(apiResponse);
                }

                var _Department = await _serverRequest.GetAllCompanyStructureAsync();

                var pendingTaskIds    = res.workflowTasks.Select(x => x.TargetId).ToList();
                var pendingTaskTokens = res.workflowTasks.Select(s => s.WorkflowToken).ToList();
                var prn = await _repo.GetPRNAwaitingApprovalAsync(pendingTaskIds, pendingTaskTokens);

                apiResponse.RequisitionNotes = prn.Select(d => new RequisitionNoteObj {
                    ApprovalStatusId     = d.ApprovalStatusId,
                    Comment              = d.Comment,
                    DeliveryLocation     = d.DeliveryLocation,
                    DepartmentId         = d.DepartmentId,
                    Description          = d.Description,
                    DocumentNumber       = d.DocumentNumber,
                    ExpectedDeliveryDate = d.ExpectedDeliveryDate,
                    IsFundAvailable      = d.IsFundAvailable,
                    PurchaseReqNoteId    = d.PurchaseReqNoteId,
                    RequestBy            = d.RequestBy,
                    StatusName           = Convert.ToString((ApprovalStatus)d.ApprovalStatusId),
                    Total          = d.Total,
                    RequestDate    = d.CreatedOn,
                    WorkflowToken  = d.WorkflowToken,
                    PRNNumber      = d.PRNNumber,
                    DepartmentName = _Department.companyStructures.FirstOrDefault(c => c.CompanyStructureId == d.DepartmentId)?.Name,
                    DetailsCount   = d.purch_prndetails.Count()
                }).ToList();

                apiResponse.Status.IsSuccessful            = true;
                apiResponse.Status.Message.FriendlyMessage = prn.Count() < 1 ? "No PRN awaiting approvals" : null;
                return(apiResponse);
            }
            catch (SqlException ex)
            {
                throw ex;
            }
        }