Пример #1
0
        public JsonResult RemoveProduct(InvoiceChangeProductViewModel model)
        {
            try
            {
                var currentUser = GetAuthenticatedUser();

                var product       = _context.Product.Single(x => x.StatusId != ProductStatus.Deleted.Id && x.Id == model.productId);
                var invoice       = _context.Invoice.Single(x => x.InvoiceStatusId != InvoiceStatus.Deleted.Id && x.Id == model.invoiceId);
                var invoiceDetail = invoice.DetailList.Single(x => x.StatusId != InvoiceDetailStatus.Deleted.Id && x.ProductId == model.productId);

                var availableInvoiceStatusList = new InvoiceStatus[] { InvoiceStatus.Registered, InvoiceStatus.InProgress, InvoiceStatus.Factored, InvoiceStatus.Preparing };
                if (!availableInvoiceStatusList.Any(x => x.Id == invoice.InvoiceStatusId))
                {
                    return(Error("فاکتور در وضعیتی نیست که بتوان از آن محصول کسر کرد."));
                }

                if (model.count > invoiceDetail.Count)
                {
                    return(Error("تعداد وارد شده از تعداد ثبت شده در فاکتور بیشتر است."));
                }

                var price = model.count * invoiceDetail.Price;
                if (price > invoice.UnpaidPrice)
                {
                    var user = _context.User.Single(x => x.Id == currentUser.id);
                    user.Balance = user.Balance + price;

                    var balanceLog = new UserBalanceLog()
                    {
                        UserId       = invoice.User.Id,
                        Amount       = price,
                        TypeId       = BalanceType.Positive.Id,
                        Description  = string.Format("بابت کسر محصول {0} به تعداد {1} از فاکتور {2}", product.Code, model.count, invoice.InvoiceNo),
                        CreateUserId = currentUser.id,
                        CreateDate   = GetDatetime(),
                        CreateIp     = GetCurrentIp()
                    };
                    _context.UserBalanceLog.Add(balanceLog);
                }
                else
                {
                    invoice.UnpaidPrice -= price;
                }

                invoice.Price       = invoice.Price - price;
                invoiceDetail.Count = invoiceDetail.Count - model.count;

                if (invoiceDetail.Count == 0)
                {
                    invoiceDetail.StatusId = InvoiceDetailStatus.Deleted.Id;
                }

                var invoiceLog = new InvoiceLog()
                {
                    InvoiceId    = invoice.Id,
                    StatusId     = invoice.InvoiceStatusId,
                    Description  = string.Format("کسر محصول {0} به تعداد {1} از فاکتور", product.Code, model.count),
                    CreateUserId = currentUser.id,
                    CreateDate   = GetDatetime(),
                    CreateIp     = GetCurrentIp()
                };
                _context.InvoiceLog.Add(invoiceLog);

                _context.SaveChanges();

                return(Success("محصول مورد نظر با موفقیت از فاکتور کسر شد."));
            }
            catch (Exception ex)
            {
                return(ServerError(ex));
            }
        }
Пример #2
0
        public JsonResult Addproduct(InvoiceChangeProductViewModel model)
        {
            try
            {
                var currentUser = GetAuthenticatedUser();

                var product = _context.Product.Single(x => x.StatusId != ProductStatus.Deleted.Id && x.Id == model.productId);
                if (model.count <= 0)
                {
                    return(Error("تعداد وارد شده صحیح نیست."));
                }
                if (product.Count < model.count)
                {
                    return(Error("تعداد موجودی از تعداد درخواستی برای اضافه شدن به فاکتور بیشتر است."));
                }

                var invoice = _context.Invoice.Single(x => x.InvoiceStatusId != InvoiceStatus.Deleted.Id && x.Id == model.invoiceId);

                var availableInvoiceStatusList = new InvoiceStatus[] { InvoiceStatus.Registered, InvoiceStatus.InProgress, InvoiceStatus.Factored, InvoiceStatus.Preparing };
                if (!availableInvoiceStatusList.Any(x => x.Id == invoice.InvoiceStatusId))
                {
                    return(Error("فاکتور در وضعیتی نیست که بتوان به آن محصول اضافه کرد."));
                }

                var invoiceDetail = new InvoiceDetail()
                {
                    InvoiceId        = invoice.Id,
                    ProductId        = model.productId,
                    ProductFeatureId = model.productFeatureId,
                    Count            = model.count,
                    Price            = product.Price,
                    StatusId         = InvoiceDetailStatus.Accepted.Id,
                    CreateUserId     = currentUser.id,
                    ModifyUserId     = currentUser.id,
                    CreateDate       = GetDatetime(),
                    ModifyDate       = GetDatetime(),
                    CreateIp         = GetCurrentIp(),
                    ModifyIp         = GetCurrentIp()
                };
                _context.InvoiceDetail.Add(invoiceDetail);

                invoice.Price       += (invoiceDetail.Count * invoiceDetail.Price);
                invoice.UnpaidPrice += (invoiceDetail.Count * invoiceDetail.Price);
                invoice.ModifyUserId = currentUser.id;
                invoice.ModifyDate   = GetDatetime();
                invoice.ModifyIp     = GetCurrentIp();

                var invoiceLog = new InvoiceLog()
                {
                    InvoiceId    = invoice.Id,
                    StatusId     = invoice.InvoiceStatusId,
                    Description  = string.Format("اضافه کردن محصول {0} به تعداد {1} در فاکتور", product.Code, model.count),
                    CreateUserId = currentUser.id,
                    CreateDate   = GetDatetime(),
                    CreateIp     = GetCurrentIp()
                };
                _context.InvoiceLog.Add(invoiceLog);

                product.Count       -= model.count;
                product.ModifyUserId = currentUser.id;
                product.ModifyDate   = GetDatetime();
                product.ModifyIp     = GetCurrentIp();

                _context.SaveChanges();

                return(Success("محصول مورد نظر با موفقیت به فاکتور اضافه شد."));
            }
            catch (Exception ex)
            {
                return(ServerError(ex));
            }
        }