public void PurchaseReturnRecordAdd(PurchasePaymentReturnRecordModel model) { var net = model.CurrentReturnAmount - model.PrevReturnAmount; if (net == 0) { return; } var returnRecord = _mapper.Map <PurchasePaymentReturnRecord>(model); Context.PurchasePaymentReturnRecord.Add(returnRecord); if (model.AccountId != null) { BalanceAdd(model.AccountId.Value, net); } Context.SaveChanges(); }
public async Task <DbResponse <int> > BillUpdated(PurchaseUpdatePostModel model, IUnitOfWork db, string userName) { var response = new DbResponse <int>(); try { var purchase = Context.Purchase .Include(s => s.PurchaseList) .FirstOrDefault(s => s.PurchaseId == model.PurchaseId); if (purchase == null) { response.IsSuccess = false; response.Message = "Not found"; return(response); } var registrationId = db.Registrations.GetRegID_ByUserName(userName); var returnRecord = new PurchasePaymentReturnRecordModel { PrevReturnAmount = decimal.Round(purchase.PurchaseReturnAmount, 2), CurrentReturnAmount = decimal.Round(model.PurchaseReturnAmount, 2), AccountId = model.AccountId, PurchaseId = purchase.PurchaseId, RegistrationId = registrationId }; purchase.PurchaseTotalPrice = decimal.Round(model.PurchaseTotalPrice, 2); purchase.PurchaseDiscountAmount = decimal.Round(model.PurchaseDiscountAmount, 2); purchase.PurchaseReturnAmount = decimal.Round(model.PurchaseReturnAmount, 2); purchase.PurchasePaidAmount += decimal.Round(model.PaidAmount, 2); var due = (purchase.PurchaseTotalPrice + purchase.PurchaseReturnAmount) - (purchase.PurchaseDiscountAmount + purchase.PurchasePaidAmount); if (due < 0) { response.IsSuccess = false; response.Message = "Due cannot be less than zero"; return(response); } if (model.RemovedProductStockIds != null) { if (model.RemovedProductStockIds.Any()) { var removedStocks = Context.ProductStock .Include(s => s.ProductLog) .Include(s => s.Warranty) .Where(s => model.RemovedProductStockIds.Contains(s.ProductStockId)).ToList(); if (removedStocks.Any(s => s.IsSold)) { response.IsSuccess = false; response.Message = "Sold product can not be return"; return(response); } if (removedStocks.Any()) { Context.ProductStock.RemoveRange(removedStocks); } } } if (model.PurchaseList == null) { purchase.PurchaseList = null; } Context.Purchase.Update(purchase); var existProduct = model.PurchaseList.Where(p => p.PurchaseListId != 0 && p.AddedProductCodes != null).ToList(); foreach (var pItem in existProduct) { var purchaseList = Context.PurchaseList.Find(pItem.PurchaseListId); purchaseList.SellingPrice = pItem.SellingPrice; purchaseList.PurchasePrice = pItem.PurchasePrice; purchaseList.Description = pItem.Description; purchaseList.Note = pItem.Note; purchaseList.Warranty = pItem.Warranty; purchaseList.ProductStock = pItem.AddedProductCodes.Select(s => new ProductStock { ProductId = pItem.ProductId, ProductCode = s }).ToList(); Context.PurchaseList.Update(purchaseList); } var newProduct = model.PurchaseList.Where(p => p.PurchaseListId == 0 && p.AddedProductCodes != null).ToList(); var newPurchaseList = newProduct.Select(p => new PurchaseList { PurchaseListId = p.PurchaseListId, PurchaseId = model.PurchaseId, ProductId = p.ProductId, SellingPrice = p.SellingPrice, PurchasePrice = p.PurchasePrice, Description = p.Description, Note = p.Note, Warranty = p.Warranty, ProductStock = p.AddedProductCodes.Select(s => new ProductStock { ProductId = p.ProductId, ProductCode = s }).ToList() }).ToList(); Context.PurchaseList.AddRange(newPurchaseList); if (model.PaidAmount > 0) { var newSellingPaymentSn = await db.PurchasePayments.GetNewSnAsync().ConfigureAwait(false); var payment = new PurchasePayment { RegistrationId = registrationId, VendorId = purchase.VendorId, ReceiptSn = newSellingPaymentSn, PaidAmount = model.PaidAmount, AccountId = model.AccountId, PaidDate = DateTime.Now.BdTime().Date, PurchasePaymentList = new List <PurchasePaymentList> { new PurchasePaymentList { PurchasePaidAmount = model.PaidAmount, PurchaseId = model.PurchaseId } } }; await Context.PurchasePayment.AddAsync(payment); } //Account add balance if (model.PaidAmount > 0 && model.AccountId != null) { db.Account.BalanceSubtract(model.AccountId.Value, model.PaidAmount); } await Context.SaveChangesAsync(); db.Vendors.UpdatePaidDue(purchase.VendorId); //remove purchase list var removedPurchaseList = Context.PurchaseList.Where(l => !l.ProductStock.Any()).ToList(); Context.RemoveRange(removedPurchaseList); await Context.SaveChangesAsync(); //Product Logs var codes = model.PurchaseList.SelectMany(l => l.AddedProductCodes).ToArray(); var stockList = Context .ProductStock .Include(p => p.PurchaseList) .Where(s => s.PurchaseList.PurchaseId == model.PurchaseId && codes.Contains(s.ProductCode)) .ToList(); if (stockList.Any()) { var productLogs = stockList.Select(c => new ProductLogAddModel { PurchaseId = model.PurchaseId, ProductStockId = c.ProductStockId, ActivityByRegistrationId = registrationId, Details = $"Bill Updated: Product Buy at Receipt No: {purchase.PurchaseSn}", LogStatus = ProductLogStatus.PurchaseUpdate }).ToList(); //Product log db.ProductLog.AddList(productLogs); } //Return amount account update db.Account.PurchaseReturnRecordAdd(returnRecord); } catch (Exception e) { response.IsSuccess = false; response.Message = e.Message; return(response); } response.IsSuccess = true; response.Message = "Success"; response.Data = model.PurchaseId; return(response); }