예제 #1
0
        /// <summary>
        /// This method is used for end receiving SPO in database. - JJ
        /// </summary>
        /// <param name="SPOReceivingAC"> object of SPOReceivingAC</param>
        /// <param name="roleName">user's role</param>
        /// <param name="userName">user's name</param>
        /// <returns>status</returns>
        public bool EndReceiving(SPOReceivingAC SPOReceivingAC, string roleName, string userName)
        {
            try
            {
                var spo = _supplierPOContext.Find(SPOReceivingAC.PurchaseOrderId);
                if (spo != null)
                {
                    spo.IsReceived       = true;
                    spo.IsVerified       = false;
                    spo.UpdatedDate      = DateTime.UtcNow;
                    spo.ModifiedDateTime = DateTime.UtcNow;
                    _supplierPOContext.Update(spo);
                    _supplierPOContext.SaveChanges();
                    if (SPOReceivingAC.Comment == ".")
                    {
                        SPOReceivingAC.Comment = "";
                    }
                    _supplierPOWorkListRepository.SaveSupplierPurchaseOrderLog(StringConstants.ReceiveAction, SPOReceivingAC.Comment, SPOReceivingAC.PurchaseOrderId, spo.RecordId, roleName, "" + roleName + " " + StringConstants.ReceiveSPO, userName);

                    UpdateItem(spo.Id);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }
예제 #2
0
        /// <summary>
        /// This method is used for insert new supplier purchase order in database. - JJ
        /// </summary>
        /// <param name="supplierPO"> object of SupplierPOAC</param>
        /// <param name="company">object of Company</param>
        /// <param name="userName">current user's username</param>
        /// <returns>status</returns>
        public string SaveSupplierPO(SupplierPOAC supplierPO, string userName, CompanyDetail company)
        {
            try
            {
                var    log                 = new WorkFlowLog();
                var    currentUser         = _userDetailContext.First(x => x.UserName == userName && x.IsDelete == false);
                var    companyConfig       = _companyConfigurationContext.First(x => x.CompanyId == company.Id);
                var    sponumber           = companyConfig.SPOInvoiceNo;
                bool   IsApproved          = false;
                bool   IsConfirmed         = false;
                bool   IsCanceled          = false;
                bool   IsRejected          = false;
                bool   IsPartiallyReceived = false;
                string ponumber            = PurchaseOrderNumberGenerator(sponumber, 4);
                if (supplierPO.IsSubmitted)
                {
                    var workFlowLog = _IWorkFlowDetailsRepository.GetInitiationActionWorkFlow(StringConstants.SupplierPurchaseOrder, StringConstants.CreateSupplierPurchaseOrder, currentUser, company, supplierPO, supplierPO.InitiationComment, supplierPO);
                    if (workFlowLog != null)
                    {
                        log = (WorkFlowLog)workFlowLog.Item1;
                        supplierPO.ParentRecordId = log.RecordId;
                    }
                    else
                    {
                        return(StringConstants.WorkFlowNotCreated);
                    }
                    var activityWorkFlow = _workFlowContext.FirstOrDefault(x => x.Id == log.WorkFlowId);
                    if (!activityWorkFlow.NextActivity.IsClosed)
                    {
                        IsApproved = false;
                    }
                    else
                    {
                        IsApproved = true;
                    }
                }

                var  supplierType = _paramTypeContext.Fetch(x => x.Param.Key == StringConstants.SupplierType);
                bool isCredit     = false;
                foreach (var type in supplierType)
                {
                    if (type.Id == supplierPO.SupplierTypeId && type.ValueEn == StringConstants.Credit)
                    {
                        isCredit = true;
                    }
                    else
                    {
                        isCredit = false;
                    }
                }

                var supplierPurchaseOrder = new SupplierPurchaseOrder
                {
                    UserId              = currentUser.Id,
                    RecordId            = supplierPO.ParentRecordId,
                    SupplierId          = supplierPO.SupplierId,
                    InitiationBranchId  = supplierPO.InitiationBranchId,
                    IsApproved          = IsApproved,
                    IsConfirmed         = IsConfirmed,
                    IsNotProcessed      = true,
                    IsRejected          = IsRejected,
                    IsCanceled          = IsCanceled,
                    IsPartiallyReceived = IsPartiallyReceived,
                    IsSend              = false,
                    IsSubmitted         = supplierPO.IsSubmitted,
                    DueDate             = supplierPO.DueDate,
                    CreatedDateTime     = DateTime.UtcNow,
                    CreditDaysLimit     = supplierPO.SupplierDaysLimit,
                    IsCreditPayment     = isCredit,
                    UpdatedDate         = DateTime.UtcNow,
                    PurchaseOrderNumber = ponumber
                };
                _supplierPOContext.Add(supplierPurchaseOrder);
                _supplierPOContext.SaveChanges();

                if (supplierPO.IsSubmitted)
                {
                    _supplierPOWorkListContext.SaveSupplierPurchaseOrderLog(log.Action, supplierPO.InitiationComment, supplierPurchaseOrder.Id, log.RecordId, currentUser.RoleName, log.Stage, currentUser.UserName);
                }

                foreach (var branch in supplierPO.SPOBranch)
                {
                    var spoBranch = new PurchaseOrderBranch
                    {
                        CreatedDateTime = DateTime.UtcNow,
                        BranchId        = branch.Id,
                        PurchaseOrderId = supplierPurchaseOrder.Id
                    };
                    _purchaseOrderBranchContext.Add(spoBranch);
                    _purchaseOrderBranchContext.SaveChanges();
                }
                foreach (var item in supplierPO.SupplierItem)
                {
                    var poItem = new PurchaseOrderItem
                    {
                        CreatedDateTime      = DateTime.UtcNow,
                        FreeQuantity         = item.FreeQuantity,
                        ItemId               = item.ItemId,
                        OrderCostPrice       = item.OrderCostPrice,
                        OrderQuantity        = item.OrderQuantity,
                        ReceivingCostPrice   = item.OrderCostPrice,
                        BillCostPrice        = item.OrderCostPrice,
                        ReceivingQuantity    = item.OrderQuantity,
                        SystemParameterId    = item.UnitParamTypeId,
                        PercentageDiscount   = item.PercentageDiscount,
                        IsPercentageDiscount = true,
                        PurchaseOrderId      = supplierPurchaseOrder.Id,
                        ReceivingDate        = supplierPO.DueDate,
                        UpdatedDate          = DateTime.UtcNow,
                        SPOReceivingStatus   = SPOReceivingStatus.NotReceived
                    };
                    _purchaseOrderItemContext.Add(poItem);
                    _purchaseOrderItemContext.SaveChanges();
                }
                return(StringConstants.SPOCreated);
            }
            catch (Exception ex)
            {
                _errorLog.LogException(ex);
                throw;
            }
        }
        /// <summary>
        /// This method is used to save SPO Payment. - JJ
        /// </summary>
        /// <param name="supplierPOPayment"> object of SPOPaymentAC</param>
        /// <param name="RoleName">rolename of the logged in user</param>
        /// <param name="userName">username of the logged in user</param>
        /// <returns>status</returns>
        public string SaveSupplierPayment(SPOPaymentAC supplierPOPayment, string RoleName, string userName)
        {
            decimal creditNoteAmount;
            string  poNumber = string.Empty;
            SupplierPaymentDetail spDetail = new SupplierPaymentDetail
            {
                Amount          = supplierPOPayment.Amount,
                CreatedDateTime = DateTime.UtcNow,
                IsPOBillPayment = true
            };

            _supplierPaymentDetailContext.Add(spDetail);
            _supplierPaymentDetailContext.SaveChanges();
            foreach (var bill in supplierPOPayment.SPOBill)
            {
                var poSupplierBill = _poSupplierBillContext.FirstOrDefault(x => x.BillNumber == bill.BillNumber && x.SupplierPurchaseOrder.PurchaseOrderNumber == bill.PurchaseOrderNo);
                if (poSupplierBill != null)
                {
                    poNumber = bill.PurchaseOrderNo;
                    poSupplierBill.IsPaid           = true;
                    poSupplierBill.ModifiedDateTime = DateTime.UtcNow;
                    _poSupplierBillContext.Update(poSupplierBill);
                    _poSupplierBillContext.SaveChanges();
                    POBillPayment poBill = new POBillPayment
                    {
                        CreatedDateTime   = DateTime.UtcNow,
                        VoucherNo         = supplierPOPayment.VoucherNo,
                        POSupplierBillId  = poSupplierBill.Id,
                        SupplierPaymentId = spDetail.Id
                    };
                    _poBillPaymentContext.Add(poBill);
                    _poBillPaymentContext.SaveChanges();
                }
            }

            var paymentTypeList = _paramTypeContext.Fetch(x => x.Param.Value.Equals(StringConstants.POSPaymentType)).ToList();

            if (supplierPOPayment.Cash != 0)
            {
                PaymentType type = new PaymentType
                {
                    Amount            = supplierPOPayment.Cash,
                    CreatedDateTime   = DateTime.UtcNow,
                    SupplierPaymentId = spDetail.Id,
                    TypeId            = paymentTypeList.FirstOrDefault(x => x.ValueEn.Equals(StringConstants.Cash)).Id
                };
                _paymentTypeContext.Add(type);
                _paymentTypeContext.SaveChanges();
            }
            if (supplierPOPayment.Cheque != 0)
            {
                PaymentType type = new PaymentType
                {
                    Amount            = supplierPOPayment.Cheque,
                    ChequeNo          = supplierPOPayment.ChequeNo,
                    CreatedDateTime   = DateTime.UtcNow,
                    SupplierPaymentId = spDetail.Id,
                    TypeId            = paymentTypeList.FirstOrDefault(x => x.ValueEn.Equals(StringConstants.Cheque)).Id
                };
                _paymentTypeContext.Add(type);
                _paymentTypeContext.SaveChanges();
            }

            creditNoteAmount = supplierPOPayment.Credit;

            if (supplierPOPayment.Credit != 0)
            {
                PaymentType type = new PaymentType
                {
                    Amount            = supplierPOPayment.Credit,
                    CreatedDateTime   = DateTime.UtcNow,
                    SupplierPaymentId = spDetail.Id,
                    TypeId            = _paramTypeContext.FirstOrDefault(x => x.ValueEn.Equals(StringConstants.CreditNote)).Id
                };
                _paymentTypeContext.Add(type);
                _paymentTypeContext.SaveChanges();

                if (supplierPOPayment.CreditNoteDetail != null && supplierPOPayment.CreditNoteDetail.Count > 0)
                {
                    foreach (var note in supplierPOPayment.CreditNoteDetail)
                    {
                        var creditNote = _creditNoteDetailContext.Find(note.Id);
                        if (creditNote != null)
                        {
                            if (creditNote.IsCollected)
                            {
                                if (creditNote.RemainigAmount >= creditNoteAmount)
                                {
                                    creditNote.RemainigAmount = creditNote.RemainigAmount - creditNoteAmount;
                                    creditNoteAmount          = 0;
                                }
                                else
                                {
                                    creditNoteAmount          = creditNoteAmount - creditNote.RemainigAmount;
                                    creditNote.RemainigAmount = 0;
                                }
                            }
                            else
                            {
                                creditNote.IsCollected = true;
                                if (creditNote.Amount >= creditNoteAmount)
                                {
                                    creditNote.RemainigAmount = creditNote.Amount - creditNoteAmount;
                                    creditNoteAmount          = 0;
                                }
                                else
                                {
                                    creditNoteAmount          = creditNoteAmount - creditNote.Amount;
                                    creditNote.RemainigAmount = 0;
                                }
                            }
                            creditNote.ModifiedDateTime = DateTime.UtcNow;
                            _creditNoteDetailContext.Update(creditNote);
                            _creditNoteDetailContext.SaveChanges();

                            PaymentTypeCreditNote notePaymentType = new PaymentTypeCreditNote
                            {
                                CreatedDateTime = DateTime.UtcNow,
                                CreditNoteId    = note.Id,
                                // insert as needed
                                PaymentTypeId = type.Id
                            };
                            _paymentTypeCreditNoteContext.Add(notePaymentType);
                            _paymentTypeCreditNoteContext.SaveChanges();

                            CreditNotePayment notePayment = new CreditNotePayment
                            {
                                CreatedDateTime   = DateTime.UtcNow,
                                SupplierPaymentId = spDetail.Id,
                                CreditNoteId      = note.Id
                            };
                            _creditNotePaymentContext.Add(notePayment);
                            _creditNotePaymentContext.SaveChanges();

                            if (creditNoteAmount <= 0)
                            {
                                break;
                            }
                        }
                    }
                }
            }

            var poSupplierBillList = _poSupplierBillContext.Fetch(x => x.SupplierPurchaseOrder.PurchaseOrderNumber == poNumber).ToList();
            var ispaid             = true;

            foreach (var bill in poSupplierBillList)
            {
                if (!bill.IsPaid)
                {
                    ispaid = false;
                }
            }
            var spo = _supplierPurchaseOrderContext.FirstOrDefault(x => x.PurchaseOrderNumber == poNumber);

            if (ispaid)
            {
                spo.IsPaid           = true;
                spo.ModifiedDateTime = DateTime.UtcNow;
                _supplierPurchaseOrderContext.Update(spo);
                _supplierPurchaseOrderContext.SaveChanges();

                if (supplierPOPayment.Comment == ".")
                {
                    supplierPOPayment.Comment = "";
                }

                _supplierPOWorkListRepository.SaveSupplierPurchaseOrderLog("Paid", supplierPOPayment.Comment, spo.Id, spo.RecordId, RoleName, "" + RoleName + " " + StringConstants.PaySPO, userName);
            }
            else
            {
                _supplierPOWorkListRepository.SaveSupplierPurchaseOrderLog("Partially Paid", supplierPOPayment.Comment, spo.Id, spo.RecordId, RoleName, "" + RoleName + " " + StringConstants.PaySPO, userName);
            }

            var discount = CalculateDiscount(spo.Id);

            InsertIntoAccountEntries(spo, supplierPOPayment, discount);
            return("ok");
        }