/// <summary> /// This method is used for save new supplier return request in database. - JJ /// </summary> /// <param name="SupplierReturnRequest">object of SupplierReturnRequest</param> /// <param name="company">object of CompanyDetail</param> /// <param name="user">object of UserDetail</param> /// <returns>object of SupplierReturnRequest</returns> public SupplierReturnRequest SaveSupplierReturnRequest(SupplierReturnRequest SupplierReturnRequest, UserDetail user, CompanyDetail company) { try { var status = CheckSupplierConditions(SupplierReturnRequest.SupplierId, SupplierReturnRequest.SupplierReturnItemAC); if (status == "ok") { var ParentRecordId = 0; var workFlowLog = _IWorkFlowDetailsRepository.GetInitiationActionWorkFlow(StringConstants.SupplierReturnRequest, StringConstants.InitiateSupplierReturnRequest, user, company, null, SupplierReturnRequest.InitiationComment, null); if (workFlowLog != null) { WorkFlowLog log = (WorkFlowLog)workFlowLog.Item1; WorkFlowDetail workFlowDetail = (WorkFlowDetail)workFlowLog.Item2; ParentRecordId = log.RecordId; var requestNo = RequestNumberGenerator(company.Id); var supplierReturnDetail = new SupplierReturnDetail { CreatedDateTime = DateTime.UtcNow, IsRejected = false, IsDeleted = false, RecordId = ParentRecordId, LastActivityDate = DateTime.UtcNow, SupplierId = SupplierReturnRequest.SupplierId, RequestNo = requestNo, BranchId = SupplierReturnRequest.BranchId, InitiatorId = user.Id, InitiationComment = SupplierReturnRequest.InitiationComment }; _supplierReturnDetailContext.Add(supplierReturnDetail); _supplierReturnDetailContext.SaveChanges(); foreach (var item in SupplierReturnRequest.SupplierReturnItemAC) { var supplierReturnItem = new SupplierReturnItem { CostPrice = item.CostPrice, CreatedDateTime = DateTime.UtcNow, ItemId = item.ItemId, ReturnQuantity = item.ReturnQuantity, SupplierReturnId = supplierReturnDetail.Id, ReturnCauseId = item.ReturnCauseId }; _supplierReturnItemContext.Add(supplierReturnItem); _supplierReturnItemContext.SaveChanges(); var itemProfile = _itemProfileContext.Find(item.ItemId); itemProfile.IsSupplierReturnRequestGenerated = true; _itemProfileContext.Update(itemProfile); _itemProfileContext.SaveChanges(); } SupplierReturnRequest.SupplierReturnId = supplierReturnDetail.Id; var companyid = _branchDetailContext.Find(supplierReturnDetail.BranchId).CompanyId; if (workFlowDetail.NextActivity.IsClosed) { var outcome = _ISupReturnWorkListRepository.IssueCreditNote(supplierReturnDetail.Id, supplierReturnDetail.BranchId, companyid, supplierReturnDetail.InitiationComment); if (outcome) { SupplierReturnRequest.Status = "print"; } else { SupplierReturnRequest.Status = "Error in Issueing Credit Note"; } return(SupplierReturnRequest); } else { SupplierReturnRequest.Status = "ok"; return(SupplierReturnRequest); } } else { SupplierReturnRequest.Status = StringConstants.WorkFlowNotCreated; return(SupplierReturnRequest); } } else { SupplierReturnRequest.Status = status; return(SupplierReturnRequest); } } catch (Exception ex) { _errorLog.LogException(ex); throw; } }
public ActionResult CreateFromPurchaseOrder(int id) { var purchase = PurchaseOrder.Find (id); var item = new SupplierReturn (); item.CreationTime = DateTime.Now; item.ModificationTime = item.CreationTime; item.Creator = CurrentUser.Employee; item.Updater = item.Creator; item.PurchaseOrder = purchase; item.Supplier = purchase.Supplier; using (var scope = new TransactionScope ()) { item.Create (); foreach (var x in purchase.Details) { var qty = GetReturnableQuantity (x.Id); if (qty <= 0) continue; var detail = new SupplierReturnDetail { Order = item, Warehouse = x.Warehouse, PurchaseOrderDetail = x, Product = x.Product, ProductCode = x.ProductCode, ProductName = x.ProductName, Discount = x.Discount, TaxRate = x.TaxRate, IsTaxIncluded = x.IsTaxIncluded, Quantity = qty, Price = x.Price, ExchangeRate = x.ExchangeRate, Currency = x.Currency }; detail.Create (); } } return RedirectToAction ("EditSupplierReturn", new { id = item.Id }); }