public bool DeleteReceiveDetail(ReceiveDetail receiveDetail) { if (receiveDetail == null) return false; _unitOfWork.ReceiveDetailRepository.Delete(receiveDetail); _unitOfWork.Save(); return true; }
public virtual ActionResult Create(ReceiveDetail receiveDetail) { if (ModelState.IsValid) { _receiveDetailService.AddReceiveDetail(receiveDetail); return RedirectToAction("Index"); } ViewBag.CommodityID = new SelectList(_commodityService.GetAllCommodity(), "CommodityID", "Name", receiveDetail.CommodityID); ViewBag.CommodityGradeID = new SelectList(_commodityGradeService.GetAllCommodityGrade(), "CommodityGradeID", "Name"); ViewBag.ReceiveID = new SelectList(_receiveService.GetAllReceive(), "ReceiveID", "SINumber", receiveDetail.ReceiveID); ViewBag.UnitID = new SelectList(_unitService.GetAllUnit(), "UnitID", "Name", receiveDetail.UnitID); return View(receiveDetail); }
public static ReceiveDetailViewModel GenerateReceiveDetailModel(ReceiveDetail ReceiveDetailModel) { var model = new ReceiveDetailViewModel(); model.ReceiveDetailID = ReceiveDetailModel.ReceiveDetailID; model.UnitID = ReceiveDetailModel.UnitID; model.Description = ReceiveDetailModel.Description; model.ReceivedQuantityInMT = ReceiveDetailModel.QuantityInMT; model.ReceivedQuantityInUnit = ReceiveDetailModel.QuantityInUnit; model.CommodityGradeID = ReceiveDetailModel.CommodityGradeID; model.CommodityID = ReceiveDetailModel.CommodityID; model.SentQuantityInMT = ReceiveDetailModel.SentQuantityInMT; model.SentQuantityInUnit = ReceiveDetailModel.SentQuantityInUnit; model.ReceiveID = ReceiveDetailModel.ReceiveID; return(model); }
public bool EditReceiveDetail(ReceiveDetail receiveDetail) { _unitOfWork.ReceiveDetailRepository.Edit(receiveDetail); _unitOfWork.Save(); return true; }
public bool AddReceiveDetail(ReceiveDetail receiveDetail) { _unitOfWork.ReceiveDetailRepository.Add(receiveDetail); _unitOfWork.Save(); return true; }
public bool ReceiptTransactionForLoanFromNGOs(ReceiveNewViewModel viewModel, Boolean reverse = false) { //Todo: Construct Receive from the viewModel .... refactor int transactionsign = reverse ? -1 : 1; #region BindReceiveFromViewModel Receive receive; if (viewModel.ReceiveId == Guid.Empty) { receive = new Receive(); receive.ReceiveID = Guid.NewGuid(); } else { receive = _unitOfWork.ReceiveRepository.FindById(viewModel.ReceiveId); } receive.GRN = viewModel.Grn; receive.CommodityTypeID = viewModel.CommodityTypeId; receive.SourceDonorID = viewModel.SourceDonorId; receive.ResponsibleDonorID = viewModel.ResponsibleDonorId; receive.TransporterID = viewModel.TransporterId > 0 ? viewModel.TransporterId : 1; receive.PlateNo_Prime = viewModel.PlateNoPrime; receive.PlateNo_Trailer = viewModel.PlateNoTrailer; receive.DriverName = viewModel.DriverName; receive.WeightBridgeTicketNumber = viewModel.WeightBridgeTicketNumber; receive.WeightBeforeUnloading = viewModel.WeightBeforeUnloading; receive.WeightAfterUnloading = viewModel.WeightAfterUnloading; receive.VesselName = viewModel.VesselName; receive.PortName = viewModel.PortName; receive.ReceiptDate = viewModel.ReceiptDate; receive.CreatedDate = DateTime.Now; receive.WayBillNo = viewModel.WayBillNo; receive.CommoditySourceID = viewModel.CommoditySourceTypeId; receive.ReceivedByStoreMan = viewModel.ReceivedByStoreMan; receive.PurchaseOrder = viewModel.PurchaseOrder; receive.SupplierName = viewModel.SupplierName; receive.Remark = viewModel.Remark; receive.ReceiptAllocationID = viewModel.ReceiptAllocationId; receive.HubID = viewModel.CurrentHub; receive.UserProfileID = viewModel.UserProfileId; receive.StoreId = viewModel.StoreId; receive.StackNumber = viewModel.StackNumber; receive.SourceDonorID = viewModel.SourceDonorId; receive.ResponsibleDonorID = viewModel.ResponsibleDonorId; #endregion //Todo: Construct ReceiveDetail from the viewModel Transaction var transactionGroup = new TransactionGroup { TransactionGroupID = Guid.NewGuid() }; #region transaction for receiveDetail //foreach (var receiveDetailNewViewModel in viewModel.ReceiveDetailNewViewModels) //{ // ReceiveSingleTransaction(viewModel, receiveDetailNewViewModel, receive, transactionGroup); //} //Tem implantation for one Receive //check for non food #region if (viewModel.CommodityTypeId == 2) { viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInMt = 0; viewModel.ReceiveDetailNewViewModel.SentQuantityInMt = 0; } #endregion //Construct receive detail from viewModel #region var receiveDetail = new ReceiveDetail { ReceiveDetailID = Guid.NewGuid(), //Todo: if there is existing id dont give new one CommodityID = viewModel.ReceiveDetailNewViewModel.CommodityId, CommodityChildID = viewModel.ReceiveDetailNewViewModel.CommodityChildID, Description = viewModel.ReceiveDetailNewViewModel.Description, SentQuantityInMT = viewModel.ReceiveDetailNewViewModel.SentQuantityInMt, SentQuantityInUnit = viewModel.ReceiveDetailNewViewModel.SentQuantityInUnit, UnitID = viewModel.ReceiveDetailNewViewModel.UnitId, ReceiveID = receive.ReceiveID, TransactionGroupID = transactionGroup.TransactionGroupID, TransactionGroup = transactionGroup, }; #endregion //add to receive receive.ReceiveDetails.Clear(); receive.ReceiveDetails.Add(receiveDetail); var parentCommodityId = _unitOfWork.CommodityRepository.FindById(viewModel.ReceiveDetailNewViewModel.CommodityId).ParentID ?? viewModel.ReceiveDetailNewViewModel.CommodityId; //get transactionGroup from a a loaned commodity so that we can deduct commodity amount using this transactionGroup. Guid? transactionGroupIdForLoan = _unitOfWork.ReceiveDetailRepository.FindBy(r => r.ReceiveID == viewModel.SelectedGRN).Select( t => t.TransactionGroupID).FirstOrDefault(); //physical stock movement #region //transaction for goods on hand #region On Positive Side var transactionOne = new Transaction { TransactionID = Guid.NewGuid(), TransactionGroupID = transactionGroup.TransactionGroupID, TransactionDate = DateTime.Now, ParentCommodityID = null, CommodityID = receiveDetail.CommodityID, CommodityChildID = receiveDetail.CommodityChildID, LedgerID = Ledger.Constants.GOODS_ON_HAND, //HubOwnerID = DonorID = receive.SourceDonorID, AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receive.HubID), ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(viewModel.SiNumber).ShippingInstructionID, ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(viewModel.ProjectCode).ProjectCodeID, HubID = viewModel.CurrentHub, UnitID = viewModel.ReceiveDetailNewViewModel.UnitId, QuantityInMT = transactionsign * viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInMt, QuantityInUnit = transactionsign * viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInUnit, //CommodityGradeID = ProgramID = viewModel.ProgramId, StoreID = viewModel.StoreId, Stack = viewModel.StackNumber, IsFalseGRN = viewModel.IsFalseGRN }; transactionGroup.Transactions.Add(transactionOne); #endregion // transaction for goods under care, receivable, liabilities #region Negative Side var transactionTwo = new Transaction { TransactionID = Guid.NewGuid(), TransactionGroupID = transactionGroupIdForLoan,// transactionGroup.TransactionGroupID, TransactionDate = DateTime.Now, ParentCommodityID = null, CommodityID = receiveDetail.CommodityID, CommodityChildID = receiveDetail.CommodityChildID, LedgerID = Ledger.Constants.GOODS_ON_HAND,//Ledger.Constants.GOODS_UNDER_CARE, AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, viewModel.SourceHubId.GetValueOrDefault(0)), //HubOwnerID = DonorID = receive.SourceDonorID, // ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(viewModel.SiNumber).ShippingInstructionID, ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(viewModel.ProjectCode).ProjectCodeID, HubID = viewModel.CurrentHub, UnitID = viewModel.ReceiveDetailNewViewModel.UnitId, QuantityInMT = transactionsign * (-viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInMt), QuantityInUnit = transactionsign * (-viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInUnit), //CommodityGradeID = ProgramID = viewModel.ProgramId, StoreID = viewModel.StoreId, Stack = viewModel.StackNumber, IsFalseGRN = true }; //switch (viewModel.CommoditySourceTypeId) //{ // case CommoditySource.Constants.LOCALPURCHASE: // case CommoditySource.Constants.DONATION: // transactionTwo.LedgerID = Ledger.Constants.GOODS_UNDER_CARE; // transactionTwo.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, // receive.ResponsibleDonorID.GetValueOrDefault(0)); // break; // case CommoditySource.Constants.REPAYMENT: // transactionTwo.LedgerID = Ledger.Constants.GOODS_RECIEVABLE; // transactionTwo.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, // viewModel.SourceHubId.GetValueOrDefault(0)); // break; // default: // transactionTwo.LedgerID = Ledger.Constants.LIABILITIES; // transactionTwo.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, // viewModel.SourceHubId.GetValueOrDefault(0)); // break; //} transactionGroup.Transactions.Add(transactionTwo); #endregion #endregion // plan side #region #region Positive Side //statstics free var transactionThree = new Transaction { TransactionID = Guid.NewGuid(), TransactionGroupID = transactionGroup.TransactionGroupID, TransactionDate = DateTime.Now, ParentCommodityID = null, CommodityID = receiveDetail.CommodityID, CommodityChildID = receiveDetail.CommodityChildID, LedgerID = Ledger.Constants.STATISTICS_FREE_STOCK, //HubOwnerID = DonorID = receive.SourceDonorID, AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receive.HubID), ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(viewModel.SiNumber).ShippingInstructionID, ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(viewModel.ProjectCode).ProjectCodeID, HubID = viewModel.CurrentHub, UnitID = viewModel.ReceiveDetailNewViewModel.UnitId, QuantityInMT = transactionsign * viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInMt, QuantityInUnit = transactionsign * viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInUnit, //CommodityGradeID = ProgramID = viewModel.ProgramId, StoreID = viewModel.StoreId, Stack = viewModel.StackNumber, IsFalseGRN = viewModel.IsFalseGRN }; transactionGroup.Transactions.Add(transactionThree); #endregion #region Negative Side var transactionFour = new Transaction { TransactionID = Guid.NewGuid(), TransactionGroupID =transactionGroupIdForLoan, TransactionDate = DateTime.Now, ParentCommodityID = null, CommodityID = receiveDetail.CommodityID, CommodityChildID = receiveDetail.CommodityChildID, LedgerID = Ledger.Constants.STATISTICS_FREE_STOCK, AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, viewModel.SourceHubId.GetValueOrDefault(0)), //HubOwnerID = DonorID = receive.SourceDonorID, ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(viewModel.SiNumber).ShippingInstructionID, ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(viewModel.ProjectCode).ProjectCodeID, HubID = viewModel.CurrentHub, UnitID = viewModel.ReceiveDetailNewViewModel.UnitId, QuantityInMT = transactionsign * (-viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInMt), QuantityInUnit = transactionsign * (-viewModel.ReceiveDetailNewViewModel.ReceivedQuantityInUnit), //CommodityGradeID = ProgramID = viewModel.ProgramId, StoreID = viewModel.StoreId, Stack = viewModel.StackNumber, IsFalseGRN =true// viewModel.IsFalseGRN }; //if (transactionFour.CommoditySourceID == CommoditySource.Constants.DONATION || // viewModel.CommoditySourceTypeId == CommoditySource.Constants.LOCALPURCHASE) //{ // transactionFour.LedgerID = Ledger.Constants.GOODS_UNDER_CARE; // transactionFour.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, // receive.ResponsibleDonorID.GetValueOrDefault(0)); //} //else if (transactionFour.CommoditySourceID == CommoditySource.Constants.REPAYMENT) //{ // transactionFour.LedgerID = Ledger.Constants.GOODS_RECIEVABLE; // transactionFour.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, // viewModel.SourceHubId.GetValueOrDefault(0)); //} //else //{ // transactionFour.LedgerID = Ledger.Constants.LIABILITIES; // transactionFour.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, // viewModel.SourceHubId.GetValueOrDefault(0)); //} transactionGroup.Transactions.Add(transactionFour); #endregion #endregion #endregion //Todo: Save Receive try { if (!reverse) { if (viewModel.ReceiveId == Guid.Empty) { _unitOfWork.ReceiveRepository.Add(receive); } else { _unitOfWork.ReceiveRepository.Edit(receive); } } _unitOfWork.Save(); return true; } catch (Exception exception) { throw exception; } }
/// <summary> /// Saves the receipt transaction. /// </summary> /// <param name="receiveModels">The receive models.</param> /// <param name="user">The user.</param> public Boolean SaveReceiptTransaction(ReceiveViewModel receiveModels, UserProfile user, Boolean reverse=false) { // Populate more details of the reciept object // Save it when you are done. int transactionsign = reverse ? -1 : 1; Receive receive; if(receiveModels.ReceiveID!=null) { receive = _unitOfWork.ReceiveRepository.FindById(receiveModels.ReceiveID.GetValueOrDefault()); } else { receive=new Receive(); receive = receiveModels.GenerateReceive(); } receive.CreatedDate = DateTime.Now; receive.HubID = user.DefaultHubObj.HubID; receive.UserProfileID = user.UserProfileID; int? donorId = receive.SourceDonorID; var commType = _unitOfWork.CommodityTypeRepository.FindById(receiveModels.CommodityTypeID); // var comms = GenerateReceiveDetail(commodities); var transactionGroupId = Guid.NewGuid(); receive.ReceiveDetails.Clear(); foreach (ReceiveDetailViewModel c in receiveModels.ReceiveDetails) { if (commType.CommodityTypeID == 2)//if it's a non food { c.ReceivedQuantityInMT = 0; c.SentQuantityInMT = 0; } TransactionGroup tgroup = new TransactionGroup(); tgroup.TransactionGroupID = transactionGroupId; var receiveDetail = new ReceiveDetail() { CommodityID = c.CommodityID, Description = c.Description, SentQuantityInMT = c.SentQuantityInMT.Value, SentQuantityInUnit = c.SentQuantityInUnit.Value, UnitID = c.UnitID, ReceiveID = receive.ReceiveID, ReceiveDetailID = Guid.NewGuid() }; //if (c.ReceiveDetailID.HasValue&&!reverse) //{ // receiveDetail.ReceiveDetailID = c.ReceiveDetailID.Value; //} receiveDetail.TransactionGroupID = tgroup.TransactionGroupID; receiveDetail.TransactionGroup = tgroup; receive.ReceiveDetails.Add(receiveDetail); #region physical stock movement //transaction for goods on hand // previously it was GOODS_ON_HAND_UNCOMMITED var transaction = new Transaction(); transaction.TransactionID = Guid.NewGuid(); transaction.TransactionGroupID = transactionGroupId; transaction.TransactionDate = DateTime.Now; transaction.ParentCommodityID = _unitOfWork.CommodityRepository.FindById(c.CommodityID).ParentID ?? c.CommodityID; transaction.CommodityID = c.CommodityID; transaction.LedgerID = Cats.Models.Ledger.Constants.GOODS_ON_HAND; transaction.HubOwnerID = user.DefaultHubObj.HubOwnerID; transaction.DonorID = donorId; transaction.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receive.HubID); transaction.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction.HubID = user.DefaultHubObj.HubID; transaction.UnitID = c.UnitID; if (c.ReceivedQuantityInMT != null) transaction.QuantityInMT = transactionsign * c.ReceivedQuantityInMT.Value; if (c.ReceivedQuantityInUnit != null) transaction.QuantityInUnit = transactionsign * c.ReceivedQuantityInUnit.Value; if (c.CommodityGradeID != null) transaction.CommodityGradeID = c.CommodityGradeID.Value; transaction.ProgramID = receiveModels.ProgramID; transaction.StoreID = receiveModels.StoreID; transaction.Stack = receiveModels.StackNumber; transaction.TransactionGroupID = tgroup.TransactionGroupID; tgroup.Transactions.Add(transaction); var transaction2 = new Transaction(); transaction2.TransactionID = Guid.NewGuid(); transaction2.TransactionGroupID = transactionGroupId; transaction2.TransactionDate = DateTime.Now; transaction2.ParentCommodityID = transaction.ParentCommodityID; transaction2.CommodityID = c.CommodityID; transaction2.HubOwnerID = user.DefaultHubObj.HubOwnerID; transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_UNDER_CARE; if (receive.ResponsibleDonorID != null) transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, receive.ResponsibleDonorID.Value); //Decide from where the -ve side of the transaction comes from //it is either from the allocated stock // or it is from goods under care. // this means that this receipt is done without having gone through the gift certificate process. if (receiveModels.CommoditySourceID == CommoditySource.Constants.DONATION || receiveModels.CommoditySourceID == CommoditySource.Constants.LOCALPURCHASE) { transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_UNDER_CARE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, receive.ResponsibleDonorID.Value); } else if (receiveModels.CommoditySourceID == CommoditySource.Constants.REPAYMENT) { transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_RECIEVABLE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } else { transaction2.LedgerID = Cats.Models.Ledger.Constants.LIABILITIES; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } transaction2.DonorID = donorId; transaction2.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction2.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction2.HubID = user.DefaultHubObj.HubID; transaction2.UnitID = c.UnitID; // this is the credit part, so make it Negative if (c.ReceivedQuantityInMT != null) transaction2.QuantityInMT = transactionsign*(-c.ReceivedQuantityInMT.Value); if (c.ReceivedQuantityInUnit != null) transaction2.QuantityInUnit = transactionsign*(-c.ReceivedQuantityInUnit.Value); if (c.CommodityGradeID != null) transaction2.CommodityGradeID = c.CommodityGradeID.Value; transaction2.ProgramID = receiveModels.ProgramID; transaction2.StoreID = receiveModels.StoreID; transaction2.Stack = receiveModels.StackNumber; transaction2.TransactionGroupID = tgroup.TransactionGroupID; tgroup.Transactions.Add(transaction2); #endregion #region plan side of the transaction //transaction for statistics transaction = new Transaction(); transaction.TransactionID = Guid.NewGuid(); transaction.TransactionGroupID = transactionGroupId; transaction.TransactionDate = DateTime.Now; transaction.ParentCommodityID = _unitOfWork.CommodityRepository.FindById(c.CommodityID).ParentID ?? c.CommodityID; transaction.CommodityID = c.CommodityID; transaction.DonorID = donorId; transaction.LedgerID = Cats.Models.Ledger.Constants.STATISTICS_FREE_STOCK; transaction.HubOwnerID = user.DefaultHubObj.HubOwnerID; transaction.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receive.HubID); transaction.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction.HubID = user.DefaultHubObj.HubID; transaction.UnitID = c.UnitID; if (c.ReceivedQuantityInMT != null) transaction.QuantityInMT = transactionsign* c.ReceivedQuantityInMT.Value; if (c.ReceivedQuantityInUnit != null) transaction.QuantityInUnit = transactionsign * c.ReceivedQuantityInUnit.Value; if (c.CommodityGradeID != null) transaction.CommodityGradeID = c.CommodityGradeID.Value; transaction.ProgramID = receiveModels.ProgramID; transaction.StoreID = receiveModels.StoreID; transaction.Stack = receiveModels.StackNumber; transaction.TransactionGroupID = tgroup.TransactionGroupID; tgroup.Transactions.Add(transaction); // transaction for Receivable transaction2 = new Transaction(); transaction2.TransactionID = Guid.NewGuid(); transaction2.TransactionGroupID = transactionGroupId; transaction2.TransactionDate = DateTime.Now; //TAKEs the PARENT FROM THE FIRST TRANSACTION transaction2.ParentCommodityID = transaction.ParentCommodityID; transaction2.CommodityID = c.CommodityID; transaction2.DonorID = donorId; transaction2.HubOwnerID = user.DefaultHubObj.HubOwnerID; transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_RECIEVABLE; if (receive.ResponsibleDonorID != null) transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, receive.ResponsibleDonorID.Value); //Decide from where the -ve side of the transaction comes from //it is either from the allocated stock // or it is from goods under care. // this means that this receipt is done without having gone through the gift certificate process. #region "commented out" if (receiveModels.CommoditySourceID == CommoditySource.Constants.DONATION || receiveModels.CommoditySourceID == CommoditySource.Constants.LOCALPURCHASE) { transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_UNDER_CARE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, receive.ResponsibleDonorID.Value); } else if (receiveModels.CommoditySourceID == CommoditySource.Constants.REPAYMENT) { transaction2.LedgerID = Cats.Models.Ledger.Constants.GOODS_RECIEVABLE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } else { transaction2.LedgerID = Cats.Models.Ledger.Constants.LIABILITIES; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } #endregion transaction2.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction2.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction2.HubID = user.DefaultHubObj.HubID; transaction2.UnitID = c.UnitID; // this is the credit part, so make it Negative if (c.ReceivedQuantityInMT != null) transaction2.QuantityInMT = transactionsign * (- c.ReceivedQuantityInMT.Value); if (c.ReceivedQuantityInUnit != null) transaction2.QuantityInUnit = transactionsign * (-c.ReceivedQuantityInUnit.Value); if (c.CommodityGradeID != null) transaction2.CommodityGradeID = c.CommodityGradeID.Value; transaction2.ProgramID = receiveModels.ProgramID; transaction2.StoreID = receiveModels.StoreID; transaction2.Stack = receiveModels.StackNumber; transaction2.TransactionGroupID = tgroup.TransactionGroupID; // hack to get past same key object in context error //repository.Transaction = new TransactionRepository(); tgroup.Transactions.Add(transaction2); #endregion } try { if(!reverse) { if(receiveModels.ReceiveID==null) { _unitOfWork.ReceiveRepository.Add(receive); } else { _unitOfWork.ReceiveRepository.Edit(receive); } } _unitOfWork.Save(); return true; } catch (Exception exp) { //TODO: Save the exception somewhere throw new Exception("The Receipt Transaction Cannot be saved. <br />Detail Message :" + exp.StackTrace); } }
public static ReceiveDetailViewModel GenerateReceiveDetailModel(ReceiveDetail ReceiveDetailModel) { ReceiveDetailViewModel model = new ReceiveDetailViewModel(); model.ReceiveDetailID = ReceiveDetailModel.ReceiveDetailID; model.UnitID = ReceiveDetailModel.UnitID; model.Description = ReceiveDetailModel.Description; model.ReceivedQuantityInMT = ReceiveDetailModel.QuantityInMT; model.ReceivedQuantityInUnit = ReceiveDetailModel.QuantityInUnit; model.CommodityGradeID = ReceiveDetailModel.CommodityGradeID; model.CommodityID = ReceiveDetailModel.CommodityID; model.SentQuantityInMT = ReceiveDetailModel.SentQuantityInMT; model.SentQuantityInUnit = ReceiveDetailModel.SentQuantityInUnit; model.ReceiveID = ReceiveDetailModel.ReceiveID; return model; }
/// <summary> /// Saves the receipt transaction. /// </summary> /// <param name="receiveModels">The receive models.</param> /// <param name="user">The user.</param> public void SaveReceiptTransaction(ReceiveViewModel receiveModels, UserProfile user) { // Populate more details of the reciept object // Save it when you are done. Receive receive = receiveModels.GenerateReceive(); receive.CreatedDate = DateTime.Now; receive.HubID = user.DefaultHub.HubID; receive.UserProfileID = user.UserProfileID; var commType = _unitOfWork.CommodityTypeRepository.FindById(receiveModels.CommodityTypeID); // var comms = GenerateReceiveDetail(commodities); var transactionGroupId = Guid.NewGuid(); foreach (ReceiveDetailViewModel c in receiveModels.ReceiveDetails) { if (commType.CommodityTypeID == 2)//if it's a non food { c.ReceivedQuantityInMT = 0; c.SentQuantityInMT = 0; } TransactionGroup tgroup = new TransactionGroup(); tgroup.TransactionGroupID = transactionGroupId; var receiveDetail = new ReceiveDetail() { CommodityID = c.CommodityID, Description = c.Description, SentQuantityInMT = c.SentQuantityInMT.Value, SentQuantityInUnit = c.SentQuantityInUnit.Value, UnitID = c.UnitID, ReceiveID = receive.ReceiveID }; if (c.ReceiveDetailID.HasValue) { receiveDetail.ReceiveDetailID = c.ReceiveDetailID.Value; } receiveDetail.TransactionGroupID = tgroup.TransactionGroupID; receiveDetail.TransactionGroup = tgroup; receive.ReceiveDetails.Add(receiveDetail); Transaction transaction = new Transaction(); transaction.TransactionID = Guid.NewGuid(); transaction.TransactionGroupID = transactionGroupId; transaction.TransactionDate = DateTime.Now; transaction.ParentCommodityID = _unitOfWork.CommodityRepository.FindById(c.CommodityID).ParentID ?? c.CommodityID; transaction.CommodityID = c.CommodityID; transaction.LedgerID = Ledger.Constants.GOODS_ON_HAND_UNCOMMITED; transaction.HubOwnerID = user.DefaultHub.HubOwnerID; transaction.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receive.HubID); transaction.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction.HubID = user.DefaultHub.HubID; transaction.UnitID = c.UnitID; if (c.ReceivedQuantityInMT != null) transaction.QuantityInMT = c.ReceivedQuantityInMT.Value; if (c.ReceivedQuantityInUnit != null) transaction.QuantityInUnit = c.ReceivedQuantityInUnit.Value; if (c.CommodityGradeID != null) transaction.CommodityGradeID = c.CommodityGradeID.Value; transaction.ProgramID = receiveModels.ProgramID; transaction.StoreID = receiveModels.StoreID; transaction.Stack = receiveModels.StackNumber; transaction.TransactionGroupID = tgroup.TransactionGroupID; tgroup.Transactions.Add(transaction); // do the second half of the transaction here. var transaction2 = new Transaction(); transaction2.TransactionID = Guid.NewGuid(); transaction2.TransactionGroupID = transactionGroupId; transaction2.TransactionDate = DateTime.Now; //TAKEs the PARENT FROM THE FIRST TRANSACTION transaction2.ParentCommodityID = transaction.ParentCommodityID; transaction2.CommodityID = c.CommodityID; transaction2.HubOwnerID = user.DefaultHub.HubOwnerID; //Decide from where the -ve side of the transaction comes from //it is either from the allocated stock // or it is from goods under care. // this means that this receipt is done without having gone through the gift certificate process. if (receiveModels.CommoditySourceID == CommoditySource.Constants.DONATION || receiveModels.CommoditySourceID == CommoditySource.Constants.LOCALPURCHASE) { transaction2.LedgerID = Ledger.Constants.GOODS_UNDER_CARE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.DONOR, receive.ResponsibleDonorID.Value); } else if (receiveModels.CommoditySourceID == CommoditySource.Constants.REPAYMENT) { transaction2.LedgerID = Ledger.Constants.GOODS_RECIEVABLE; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } else { transaction2.LedgerID = Ledger.Constants.LIABILITIES; transaction2.AccountID = _accountService.GetAccountIdWithCreate(Account.Constants.HUB, receiveModels.SourceHubID.Value); } transaction2.ShippingInstructionID = _shippingInstructionService.GetSINumberIdWithCreate(receiveModels.SINumber).ShippingInstructionID; transaction2.ProjectCodeID = _projectCodeService.GetProjectCodeIdWIthCreate(receiveModels.ProjectNumber).ProjectCodeID; transaction2.HubID = user.DefaultHub.HubID; transaction2.UnitID = c.UnitID; // this is the credit part, so make it Negative if (c.ReceivedQuantityInMT != null) transaction2.QuantityInMT = -c.ReceivedQuantityInMT.Value; if (c.ReceivedQuantityInUnit != null) transaction2.QuantityInUnit = -c.ReceivedQuantityInUnit.Value; if (c.CommodityGradeID != null) transaction2.CommodityGradeID = c.CommodityGradeID.Value; transaction2.ProgramID = receiveModels.ProgramID; transaction2.StoreID = receiveModels.StoreID; transaction2.Stack = receiveModels.StackNumber; transaction2.TransactionGroupID = tgroup.TransactionGroupID; // hack to get past same key object in context error //repository.Transaction = new TransactionRepository(); tgroup.Transactions.Add(transaction2); } // Try to save this transaction // db.Database.Connection.Open(); // DbTransaction dbTransaction = db.Database.Connection.BeginTransaction(); try { //repository.Receive.Add(receive); _unitOfWork.ReceiveRepository.Add(receive); _unitOfWork.Save(); } catch (Exception exp) { // dbTransaction.Rollback(); //TODO: Save the exception somewhere throw new Exception("The Receipt Transaction Cannot be saved. <br />Detail Message :" + exp.StackTrace); } }