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)); } }
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)); } }