public void DeleteManualTransaction(TransactionViewModel transaction, int userId) { Transaction entity = _transactionRepository.GetById(transaction.Id); entity.ModifyDate = DateTime.Now; entity.ModifyUserId = userId; entity.Status = (int)DbConstant.DefaultDataStatus.Deleted; _transactionRepository.AttachNavigation <User>(entity.CreateUser); _transactionRepository.AttachNavigation <User>(entity.ModifyUser); _transactionRepository.AttachNavigation <Reference>(entity.PaymentMethod); _transactionRepository.AttachNavigation <Reference>(entity.ReferenceTable); _transactionRepository.Update(entity); _unitOfWork.SaveChanges(); }
public void InsertTransaction(TransactionViewModel parentTransaction, List <TransactionDetailViewModel> detailTransactionList, int userId) { Reference refTable = _referenceRepository.GetMany(r => r.Code == DbConstant.REF_TRANSTBL_MANUAL).FirstOrDefault(); DateTime currentTime = DateTime.Now; Transaction parentEntity = new Transaction(); Map(parentTransaction, parentEntity); parentEntity.CreateUserId = userId; parentEntity.CreateDate = currentTime; parentEntity.ModifyUserId = userId; parentEntity.ModifyDate = currentTime; parentEntity.ReferenceTableId = refTable.Id; parentEntity.PrimaryKeyValue = -1; parentEntity.Status = (int)DbConstant.DefaultDataStatus.Active; _transactionRepository.AttachNavigation <User>(parentEntity.CreateUser); _transactionRepository.AttachNavigation <User>(parentEntity.ModifyUser); _transactionRepository.AttachNavigation <Reference>(parentEntity.PaymentMethod); _transactionRepository.AttachNavigation <Reference>(parentEntity.ReferenceTable); parentEntity = _transactionRepository.Add(parentEntity); _unitOfWork.SaveChanges(); // update primary key value into previous inserted transaction id parentEntity = _transactionRepository.GetById(parentEntity.Id); parentEntity.PrimaryKeyValue = parentEntity.Id; _transactionRepository.Update(parentEntity); _unitOfWork.SaveChanges(); foreach (var detailTransaction in detailTransactionList) { TransactionDetail detailEntity = new TransactionDetail(); Map(detailTransaction, detailEntity); detailEntity.ParentId = parentEntity.Id; _transactionDetailRepository.AttachNavigation <Transaction>(detailEntity.Parent); _transactionDetailRepository.AttachNavigation <JournalMaster>(detailEntity.Journal); _transactionDetailRepository.Add(detailEntity); } _unitOfWork.SaveChanges(); }
public void DeletePurchaseReturn(int purchaseReturnID, int userID) { using (var trans = _unitOfWork.BeginTransaction()) { try { DateTime serverTime = DateTime.Now; Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASERETURN).FirstOrDefault(); PurchaseReturn purchaseReturn = _purchaseReturnRepository.GetById(purchaseReturnID); purchaseReturn.Status = (int)DbConstant.DefaultDataStatus.Deleted; purchaseReturn.ModifyDate = serverTime; purchaseReturn.ModifyUserId = userID; _purchaseReturnRepository.AttachNavigation(purchaseReturn.CreateUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.ModifyUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.Purchasing); _purchaseReturnRepository.Update(purchaseReturn); _unitOfWork.SaveChanges(); List <PurchaseReturnDetail> listDetail = _purchaseReturnDetailRepository.GetMany(x => x.PurchaseReturnId == purchaseReturnID).ToList(); foreach (var itemDetail in listDetail) { itemDetail.Status = (int)DbConstant.DefaultDataStatus.Deleted; itemDetail.ModifyDate = serverTime; itemDetail.ModifyUserId = userID; _purchaseReturnDetailRepository.AttachNavigation(itemDetail.CreateUser); _purchaseReturnRepository.AttachNavigation(itemDetail.ModifyUser); _purchaseReturnRepository.AttachNavigation(itemDetail.PurchaseReturn); _purchaseReturnRepository.AttachNavigation(itemDetail.PurchasingDetail); _purchaseReturnRepository.AttachNavigation(itemDetail.SparepartManualTransaction); _purchaseReturnDetailRepository.Update(itemDetail); Sparepart sparepart = _sparepartRepository.GetById(itemDetail.PurchasingDetail.SparepartId); sparepart.StockQty += 1; PurchasingDetail purchasingDetail = _purchasingDetailRepository.GetById(itemDetail.PurchasingDetailId); purchasingDetail.QtyRemaining += itemDetail.Qty; _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser); _purchasingDetailRepository.Update(purchasingDetail); _sparepartRepository.AttachNavigation(sparepart.CreateUser); _sparepartRepository.AttachNavigation(sparepart.ModifyUser); _sparepartRepository.AttachNavigation(sparepart.CategoryReference); _sparepartRepository.AttachNavigation(sparepart.UnitReference); _sparepartRepository.Update(sparepart); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userID; stockCard.PurchaseDate = serverTime; stockCard.PrimaryKeyValue = purchaseReturn.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = sparepart.Id; stockCard.Description = "Pembatalan Retur Pembelian"; stockCard.QtyIn = 1; stockCard.QtyInPrice = Convert.ToDouble(itemDetail.PurchasingDetail.Price); SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id); double lastStock = 0; double lastStockPrice = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; lastStockPrice = lastStockCard.QtyLastPrice; } stockCard.QtyFirst = lastStock; stockCard.QtyFirstPrice = lastStockPrice; stockCard.QtyLast = lastStock + stockCard.QtyIn; stockCard.QtyLastPrice = lastStockPrice + stockCard.QtyInPrice; _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); stockCard = _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(itemDetail.PurchasingDetail.Price); stockCardDtail.QtyIn = 1; stockCardDtail.QtyInPrice = Convert.ToDouble(itemDetail.PurchasingDetail.Price); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchaseReturn.PurchasingId); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail + stockCardDtail.QtyIn; stockCardDtail.QtyLastPrice = lastStockDetailPrice + stockCardDtail.QtyInPrice; stockCardDtail.PurchasingId = purchaseReturn.PurchasingId; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); } _unitOfWork.SaveChanges(); Transaction transaction = _transactionRepository.GetMany(x => x.PrimaryKeyValue == purchaseReturnID && x.ReferenceTableId == transactionReferenceTable.Id).FirstOrDefault(); transaction.Status = (int)DbConstant.DefaultDataStatus.Deleted; transaction.ModifyDate = serverTime; transaction.ModifyUserId = userID; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.AttachNavigation(transaction.ReferenceTable); _transactionRepository.Update(transaction); _unitOfWork.SaveChanges(); trans.Commit(); } catch (Exception) { trans.Rollback(); throw; } } }
public void Approve(PurchasingViewModel purchasing, int userID) { using (var trans = _unitOfWork.BeginTransaction()) { try { DateTime serverTime = DateTime.Now; Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASING).FirstOrDefault(); List <PurchasingDetail> listPurchasingDetail = _purchasingDetailRepository .GetMany(c => c.PurchasingId == purchasing.Id).ToList(); foreach (var purchasingDetail in listPurchasingDetail) { Sparepart sparepartDB = _sparepartRepository.GetById(purchasingDetail.SparepartId); for (int i = 1; i <= purchasingDetail.Qty; i++) { if (!string.IsNullOrEmpty(purchasingDetail.SerialNumber)) { SpecialSparepartDetail wd = new SpecialSparepartDetail(); wd.PurchasingDetail = purchasingDetail; wd.SerialNumber = purchasingDetail.SerialNumber; wd.CreateUserId = userID; wd.CreateDate = serverTime; wd.ModifyUserId = userID; wd.ModifyDate = serverTime; wd.SparepartId = sparepartDB.Id; wd.Status = (int)DbConstant.WheelDetailStatus.Ready; _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.CreateUser); _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.ModifyUser); _specialSparepartDetailRepository.AttachNavigation(purchasingDetail); _specialSparepartDetailRepository.AttachNavigation(purchasingDetail.Sparepart);; _specialSparepartDetailRepository.Add(wd); } } purchasingDetail.Status = (int)DbConstant.PurchasingStatus.Active; purchasingDetail.QtyRemaining = purchasingDetail.Qty; _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Purchasing); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Sparepart); _purchasingDetailRepository.Update(purchasingDetail); Sparepart sparepart = _sparepartRepository.GetById(purchasingDetail.SparepartId); sparepart.StockQty += purchasingDetail.Qty; _sparepartRepository.AttachNavigation(sparepart.CreateUser); _sparepartRepository.AttachNavigation(sparepart.ModifyUser); _sparepartRepository.AttachNavigation(sparepart.CategoryReference); _sparepartRepository.AttachNavigation(sparepart.UnitReference); _sparepartRepository.Update(sparepart); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userID; stockCard.PurchaseDate = serverTime; stockCard.PrimaryKeyValue = purchasing.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = sparepart.Id; stockCard.Description = "Purchasing"; stockCard.QtyIn = purchasingDetail.Qty; stockCard.QtyInPrice = Convert.ToDouble(purchasingDetail.Price * purchasingDetail.Qty); SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id); double lastStock = 0; double lastStockPrice = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; lastStockPrice = lastStockCard.QtyLastPrice; } stockCard.QtyFirst = lastStock; stockCard.QtyFirstPrice = lastStockPrice; stockCard.QtyLast = lastStock + stockCard.QtyIn; stockCard.QtyLastPrice = lastStockPrice + stockCard.QtyInPrice; _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); stockCard = _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(purchasingDetail.Price); stockCardDtail.QtyIn = purchasingDetail.Qty; stockCardDtail.QtyInPrice = Convert.ToDouble(purchasingDetail.Price * purchasingDetail.Qty); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchasing.Id); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail + stockCardDtail.QtyIn; stockCardDtail.QtyLastPrice = lastStockDetailPrice + stockCardDtail.QtyInPrice; stockCardDtail.PurchasingId = purchasing.Id; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); } Reference refSelected = _referenceRepository.GetById(purchasing.PaymentMethodId); purchasing.Status = (int)DbConstant.PurchasingStatus.Active; if (refSelected != null && (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1 || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2 || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_KAS) ) { purchasing.TotalHasPaid = purchasing.TotalPrice; } if (purchasing.TotalHasPaid != purchasing.TotalPrice) { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled; } else { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.Settled; } Purchasing entity = _purchasingRepository.GetById(purchasing.Id); //Map(purchasing, entity); entity.PaymentStatus = purchasing.PaymentStatus; entity.Status = purchasing.Status; entity.TotalHasPaid = purchasing.TotalHasPaid; entity.TotalPrice = purchasing.TotalPrice; entity.PaymentMethodId = purchasing.PaymentMethodId; _purchasingRepository.AttachNavigation(entity.CreateUser); _purchasingRepository.AttachNavigation(entity.ModifyUser); _purchasingRepository.AttachNavigation(entity.PaymentMethod); _purchasingRepository.AttachNavigation(entity.Supplier); _purchasingRepository.Update(entity); _unitOfWork.SaveChanges(); Transaction transaction = new Transaction(); transaction.TransactionDate = purchasing.Date; transaction.TotalPayment = Convert.ToDouble(purchasing.TotalHasPaid); transaction.TotalTransaction = Convert.ToDouble(purchasing.TotalPrice); transaction.ReferenceTableId = transactionReferenceTable.Id; transaction.PrimaryKeyValue = purchasing.Id; transaction.CreateDate = serverTime; transaction.CreateUserId = userID; transaction.ModifyUserId = userID; transaction.ModifyDate = serverTime; transaction.Status = (int)DbConstant.DefaultDataStatus.Active; transaction.Description = "Pembelian sparepart"; transaction.PaymentMethodId = purchasing.PaymentMethodId; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.AttachNavigation(transaction.ReferenceTable); Transaction transactionInserted = _transactionRepository.Add(transaction); _unitOfWork.SaveChanges(); switch (refSelected.Code) { case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI: case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1: case DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2: { // Bank Kredit --> Karena berkurang TransactionDetail detailBank = new TransactionDetail(); detailBank.Credit = purchasing.TotalHasPaid; if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_EKONOMI) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id; } else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA1) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id; } else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_BANK_BCA2) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id; } detailBank.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailBank.Journal); _transactionDetailRepository.AttachNavigation(detailBank.Parent); _transactionDetailRepository.Add(detailBank); break; } case DbConstant.REF_PURCHASE_PAYMENTMETHOD_KAS: // Kas Kredit --> Karena berkurang TransactionDetail detailKas = new TransactionDetail(); detailKas.Credit = purchasing.TotalHasPaid; detailKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id; detailKas.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailKas.Journal); _transactionDetailRepository.AttachNavigation(detailKas.Parent); _transactionDetailRepository.Add(detailKas); break; case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_KAS: // Kas Kredit --> Karena berkurang TransactionDetail detailKasKarenaUangMuka = new TransactionDetail(); detailKasKarenaUangMuka.Credit = purchasing.TotalHasPaid; detailKasKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id; detailKasKarenaUangMuka.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Journal); _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Parent); _transactionDetailRepository.Add(detailKasKarenaUangMuka); // Uang Muka Debit --> Karena bertambah TransactionDetail detailUangMukaBertambahKarenaKas = new TransactionDetail(); detailUangMukaBertambahKarenaKas.Debit = purchasing.TotalHasPaid; detailUangMukaBertambahKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBertambahKarenaKas.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Parent); _transactionDetailRepository.Add(detailUangMukaBertambahKarenaKas); // Uang Muka Kredit --> Karena berkurang TransactionDetail detailUangMukaBerkurangKarenaKas = new TransactionDetail(); detailUangMukaBerkurangKarenaKas.Credit = purchasing.TotalHasPaid; detailUangMukaBerkurangKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBerkurangKarenaKas.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Parent); _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaKas); break; case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI: case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1: case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2: { // Bank Kredit --> Karena berkurang TransactionDetail detailBankKarenaUangMuka = new TransactionDetail(); detailBankKarenaUangMuka.Credit = purchasing.TotalHasPaid; if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id; } else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id; } else if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id; } detailBankKarenaUangMuka.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Journal); _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Parent); _transactionDetailRepository.Add(detailBankKarenaUangMuka); // Uang Muka Debit --> Karena bertambah TransactionDetail detailUangMukaBertambahKarenaBank = new TransactionDetail(); detailUangMukaBertambahKarenaBank.Debit = purchasing.TotalHasPaid; detailUangMukaBertambahKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBertambahKarenaBank.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Parent); _transactionDetailRepository.Add(detailUangMukaBertambahKarenaBank); // Uang Muka Kredit --> Karena berkurang TransactionDetail detailUangMukaBerkurangKarenaBank = new TransactionDetail(); detailUangMukaBerkurangKarenaBank.Credit = purchasing.TotalHasPaid; detailUangMukaBerkurangKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBerkurangKarenaBank.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Parent); _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaBank); break; } case DbConstant.REF_PURCHASE_PAYMENTMETHOD_UTANG: TransactionDetail utang = new TransactionDetail(); utang.Credit = purchasing.TotalPrice - purchasing.TotalHasPaid; utang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id; utang.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(utang.Journal); _transactionDetailRepository.AttachNavigation(utang.Parent); _transactionDetailRepository.Add(utang); break; } if (refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1 || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2 || refSelected.Code == DbConstant.REF_PURCHASE_PAYMENTMETHOD_UANGMUKA_KAS) { if (purchasing.TotalPrice > purchasing.TotalHasPaid) { // Utang Kredit --> Karena bertambah TransactionDetail utang = new TransactionDetail(); utang.Credit = purchasing.TotalPrice - purchasing.TotalHasPaid; utang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id; utang.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(utang.Journal); _transactionDetailRepository.AttachNavigation(utang.Parent); _transactionDetailRepository.Add(utang); } } // Sparepart Debit --> Karena bertambah TransactionDetail detailSparepart = new TransactionDetail(); detailSparepart.Debit = purchasing.TotalPrice; detailSparepart.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.04.01").FirstOrDefault().Id; detailSparepart.ParentId = transactionInserted.Id; _transactionDetailRepository.AttachNavigation(detailSparepart.Journal); _transactionDetailRepository.AttachNavigation(detailSparepart.Parent); _transactionDetailRepository.Add(detailSparepart); _unitOfWork.SaveChanges(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw; } } }
public void DeletePurchaseReturn(int purchaseReturnID, int userID) { using (var trans = _unitOfWork.BeginTransaction()) { try { //delete old purchase return DateTime serverTime = DateTime.Now; Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASERETURN).FirstOrDefault(); PurchaseReturn purchaseReturn = _purchaseReturnRepository.GetById(purchaseReturnID); purchaseReturn.Status = (int)DbConstant.DefaultDataStatus.Deleted; purchaseReturn.ModifyDate = serverTime; purchaseReturn.ModifyUserId = userID; _purchaseReturnRepository.AttachNavigation(purchaseReturn.CreateUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.ModifyUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.Purchasing); _purchaseReturnRepository.Update(purchaseReturn); _unitOfWork.SaveChanges(); List <PurchaseReturnDetail> listDetail = _purchaseReturnDetailRepository.GetMany(x => x.PurchaseReturnId == purchaseReturnID).ToList(); foreach (var item in listDetail) { if (item.Qty > 0) { PurchasingDetail purchasingDetail = _purchasingDetailRepository.GetById(item.PurchasingDetailId); purchasingDetail.QtyRemaining += item.Qty; _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Purchasing); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Sparepart); _purchasingDetailRepository.Update(purchasingDetail); SpecialSparepartDetail spDetail = _specialSparepartDetailRepository.GetMany(x => x.PurchasingDetailId == purchasingDetail.Id).FirstOrDefault(); if (spDetail != null) { spDetail.Status = (int)DbConstant.WheelDetailStatus.Ready; _specialSparepartDetailRepository.AttachNavigation(spDetail.CreateUser); _specialSparepartDetailRepository.AttachNavigation(spDetail.ModifyUser); _specialSparepartDetailRepository.AttachNavigation(spDetail.PurchasingDetail); _specialSparepartDetailRepository.AttachNavigation(spDetail.Sparepart); _specialSparepartDetailRepository.AttachNavigation(spDetail.SparepartManualTransaction); _specialSparepartDetailRepository.Update(spDetail); } _unitOfWork.SaveChanges(); } } List <ReturnViewModel> listReturn = listDetail .GroupBy(l => l.PurchasingDetail.Sparepart) .Select(cl => new ReturnViewModel { SparepartId = cl.First().PurchasingDetail.SparepartId, ReturQty = cl.Sum(c => c.Qty), SubTotalFee = cl.Sum(c => c.PurchasingDetail.Price * c.Qty), PricePerItem = cl.First().PurchasingDetail.Price, }).ToList(); foreach (var itemDetail in listDetail) { itemDetail.Status = (int)DbConstant.DefaultDataStatus.Deleted; itemDetail.ModifyDate = serverTime; itemDetail.ModifyUserId = userID; _purchaseReturnDetailRepository.AttachNavigation(itemDetail.CreateUser); _purchaseReturnDetailRepository.AttachNavigation(itemDetail.ModifyUser); _purchaseReturnDetailRepository.AttachNavigation(itemDetail.PurchaseReturn); _purchaseReturnDetailRepository.AttachNavigation(itemDetail.PurchasingDetail); _purchaseReturnDetailRepository.Update(itemDetail); } foreach (var itemReturn in listReturn) { Sparepart sparepart = _sparepartRepository.GetById(itemReturn.SparepartId); sparepart.StockQty += itemReturn.ReturQty; _sparepartRepository.AttachNavigation(sparepart.CreateUser); _sparepartRepository.AttachNavigation(sparepart.ModifyUser); _sparepartRepository.AttachNavigation(sparepart.CategoryReference); _sparepartRepository.AttachNavigation(sparepart.UnitReference); _sparepartRepository.Update(sparepart); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userID; stockCard.PurchaseDate = serverTime; stockCard.PrimaryKeyValue = purchaseReturn.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = sparepart.Id; stockCard.Description = "Pembatalan Retur Pembelian"; stockCard.QtyIn = itemReturn.ReturQty; stockCard.QtyInPrice = itemReturn.SubTotalFee.AsDouble(); SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id); double lastStock = 0; double lastStockPrice = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; lastStockPrice = lastStockCard.QtyLastPrice; } stockCard.QtyFirst = lastStock; stockCard.QtyFirstPrice = lastStockPrice; stockCard.QtyLast = lastStock + stockCard.QtyIn; stockCard.QtyLastPrice = lastStockPrice + stockCard.QtyInPrice; _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); stockCard = _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(itemReturn.PricePerItem); stockCardDtail.QtyIn = itemReturn.ReturQty; stockCardDtail.QtyInPrice = itemReturn.SubTotalFee.AsDouble(); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchaseReturn.PurchasingId); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail.QtyIn != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail + stockCardDtail.QtyIn; stockCardDtail.QtyLastPrice = lastStockDetailPrice + stockCardDtail.QtyInPrice; stockCardDtail.PurchasingId = purchaseReturn.PurchasingId; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); } _unitOfWork.SaveChanges(); Transaction transaction = _transactionRepository.GetMany(x => x.PrimaryKeyValue == purchaseReturnID && x.ReferenceTableId == transactionReferenceTable.Id).FirstOrDefault(); transaction.Status = (int)DbConstant.DefaultDataStatus.Deleted; transaction.ModifyDate = serverTime; transaction.ModifyUserId = userID; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.AttachNavigation(transaction.ReferenceTable); _transactionRepository.Update(transaction); Purchasing purchasing = _purchasingRepository.GetById(purchaseReturn.PurchasingId); purchasing.Status = (int)DbConstant.PurchasingStatus.Active; if (purchasing.TotalPrice != purchasing.TotalHasPaid && (purchasing.TotalPrice - purchasing.TotalHasPaid) >= (decimal)transaction.TotalTransaction) { purchasing.TotalHasPaid -= (decimal)transaction.TotalTransaction; } if (purchasing.TotalPrice == purchasing.TotalHasPaid) { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.Settled; } else { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled; } _purchasingRepository.AttachNavigation(purchasing.CreateUser); _purchasingRepository.AttachNavigation(purchasing.ModifyUser); _purchasingRepository.AttachNavigation(purchasing.PaymentMethod); _purchasingRepository.AttachNavigation(purchasing.Supplier); _unitOfWork.SaveChanges(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); throw; } } }
public void InsertPurchaseReturnFunc(int purchasingID, List <ReturnViewModel> listReturn, int userID) { DateTime serverTime = DateTime.Now; Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_PURCHASERETURN).FirstOrDefault(); PurchaseReturn purchaseReturn = new PurchaseReturn(); purchaseReturn.CreateDate = serverTime; purchaseReturn.CreateUserId = userID; purchaseReturn.ModifyDate = serverTime; purchaseReturn.ModifyUserId = userID; purchaseReturn.PurchasingId = purchasingID; purchaseReturn.Date = serverTime; purchaseReturn.Status = (int)DbConstant.DefaultDataStatus.Active; string code = "PRR" + "-" + serverTime.Month.ToString() + serverTime.Day.ToString() + "-"; //get total purchasing return created today List <PurchaseReturn> todayPRR = _purchaseReturnRepository.GetMany(s => s.Code.ToString().Contains(code) && s.CreateDate.Year == serverTime.Year).ToList(); code = code + (todayPRR.Count + 1); purchaseReturn.Code = code; _purchaseReturnRepository.AttachNavigation(purchaseReturn.CreateUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.ModifyUser); _purchaseReturnRepository.AttachNavigation(purchaseReturn.Purchasing); purchaseReturn = _purchaseReturnRepository.Add(purchaseReturn); _unitOfWork.SaveChanges(); List <PurchaseReturnDetail> listReturnDetail = new List <PurchaseReturnDetail>(); decimal totalTransaction = 0; foreach (var itemReturn in listReturn) { PurchasingDetail purchasingDetail = _purchasingDetailRepository.GetMany(x => x.Id == itemReturn.PurchasingDetailId).FirstOrDefault(); listReturnDetail.Add(new PurchaseReturnDetail { CreateDate = serverTime, CreateUserId = userID, ModifyDate = serverTime, ModifyUserId = userID, PurchaseReturnId = purchaseReturn.Id, PurchasingDetailId = purchasingDetail.Id, Qty = itemReturn.ReturQty, Status = (int)DbConstant.DefaultDataStatus.Active }); itemReturn.PricePerItem = purchasingDetail.Price; if (itemReturn.ReturQty > 0) { totalTransaction += itemReturn.ReturQty * purchasingDetail.Price; purchasingDetail.QtyRemaining -= itemReturn.ReturQty; SpecialSparepartDetail spDetail = _specialSparepartDetailRepository.GetMany(x => x.PurchasingDetailId == purchasingDetail.Id).FirstOrDefault(); if (spDetail != null) { spDetail.Status = (int)DbConstant.WheelDetailStatus.Deleted; _specialSparepartDetailRepository.AttachNavigation(spDetail.CreateUser); _specialSparepartDetailRepository.AttachNavigation(spDetail.ModifyUser); _specialSparepartDetailRepository.AttachNavigation(spDetail.PurchasingDetail); _specialSparepartDetailRepository.AttachNavigation(spDetail.Sparepart); _specialSparepartDetailRepository.AttachNavigation(spDetail.SparepartManualTransaction); _specialSparepartDetailRepository.Update(spDetail); } } _purchasingDetailRepository.AttachNavigation(purchasingDetail.CreateUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.ModifyUser); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Purchasing); _purchasingDetailRepository.AttachNavigation(purchasingDetail.Sparepart); _purchasingDetailRepository.Update(purchasingDetail); _unitOfWork.SaveChanges(); } List <ReturnViewModel> listReturnGroup = listReturn .GroupBy(l => l.SparepartId) .Select(cl => new ReturnViewModel { SparepartId = cl.First().SparepartId, ReturQty = cl.Sum(c => c.ReturQty), SubTotalFee = cl.Sum(c => c.PricePerItem * c.ReturQty), PricePerItem = cl.First().PricePerItem, }).ToList(); foreach (var itemReturnGroup in listReturnGroup) { Sparepart sparepart = _sparepartRepository.GetById(itemReturnGroup.SparepartId); sparepart.ModifyDate = serverTime; sparepart.ModifyUserId = userID; sparepart.StockQty -= itemReturnGroup.ReturQty; _sparepartRepository.AttachNavigation(sparepart.CreateUser); _sparepartRepository.AttachNavigation(sparepart.ModifyUser); _sparepartRepository.AttachNavigation(sparepart.CategoryReference); _sparepartRepository.AttachNavigation(sparepart.UnitReference); _sparepartRepository.Update(sparepart); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userID; stockCard.PurchaseDate = serverTime; stockCard.PrimaryKeyValue = purchaseReturn.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = sparepart.Id; stockCard.Description = "Retur Pembelian"; stockCard.QtyOut = itemReturnGroup.ReturQty; stockCard.QtyOutPrice = Convert.ToDouble(itemReturnGroup.SubTotalFee); SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id); double lastStock = 0; double lastStockPrice = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; lastStockPrice = lastStockCard.QtyLastPrice; } stockCard.QtyFirst = lastStock; stockCard.QtyFirstPrice = lastStockPrice; stockCard.QtyLast = lastStock - stockCard.QtyOut; stockCard.QtyLastPrice = lastStockPrice - stockCard.QtyOutPrice; _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); stockCard = _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(itemReturnGroup.PricePerItem); stockCardDtail.QtyOut = itemReturnGroup.ReturQty; stockCardDtail.QtyOutPrice = Convert.ToDouble(itemReturnGroup.SubTotalFee); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, purchasingID); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail - stockCardDtail.QtyOut; stockCardDtail.QtyLastPrice = lastStockDetailPrice - stockCardDtail.QtyOutPrice; stockCardDtail.PurchasingId = purchasingID; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); } Purchasing purchasing = _purchasingRepository.GetById(purchaseReturn.PurchasingId); purchasing.Status = (int)DbConstant.PurchasingStatus.HasReturn; if (purchasing.TotalPrice != purchasing.TotalHasPaid && (purchasing.TotalPrice - purchasing.TotalHasPaid) >= totalTransaction) { purchasing.TotalHasPaid += totalTransaction; } if (purchasing.TotalPrice == purchasing.TotalHasPaid) { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.Settled; } else { purchasing.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled; } _purchasingRepository.AttachNavigation(purchasing.CreateUser); _purchasingRepository.AttachNavigation(purchasing.ModifyUser); _purchasingRepository.AttachNavigation(purchasing.PaymentMethod); _purchasingRepository.AttachNavigation(purchasing.Supplier); _unitOfWork.SaveChanges(); foreach (var itemReturnDetail in listReturnDetail) { _purchaseReturnDetailRepository.AttachNavigation(itemReturnDetail.CreateUser); _purchaseReturnRepository.AttachNavigation(itemReturnDetail.ModifyUser); _purchaseReturnRepository.AttachNavigation(itemReturnDetail.PurchaseReturn); _purchaseReturnRepository.AttachNavigation(itemReturnDetail.PurchasingDetail); _purchaseReturnDetailRepository.Add(itemReturnDetail); } _unitOfWork.SaveChanges(); Transaction transaction = new Transaction(); transaction.CreateDate = serverTime; transaction.CreateUserId = userID; transaction.ModifyDate = serverTime; transaction.ModifyUserId = userID; transaction.PrimaryKeyValue = purchaseReturn.Id; transaction.ReferenceTableId = transactionReferenceTable.Id; transaction.TotalPayment = totalTransaction.AsDouble(); transaction.TotalTransaction = totalTransaction.AsDouble(); transaction.Status = (int)DbConstant.DefaultDataStatus.Active; transaction.Description = "Retur Pembelian"; transaction.TransactionDate = serverTime; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.AttachNavigation(transaction.ReferenceTable); transaction = _transactionRepository.Add(transaction); _unitOfWork.SaveChanges(); TransactionDetail transDebit = new TransactionDetail(); transDebit.Debit = totalTransaction; transDebit.ParentId = transaction.Id; transDebit.JournalId = _journalMasterRepository.GetMany(j => j.Code == "2.01.01.01").FirstOrDefault().Id; _transactionDetailRepository.AttachNavigation(transDebit.Journal); _transactionDetailRepository.AttachNavigation(transDebit.Parent); _transactionDetailRepository.Add(transDebit); TransactionDetail transCredit = new TransactionDetail(); transCredit.Credit = totalTransaction; transCredit.ParentId = transaction.Id; transCredit.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.04.01").FirstOrDefault().Id; _transactionDetailRepository.AttachNavigation(transCredit.Journal); _transactionDetailRepository.AttachNavigation(transCredit.Parent); _transactionDetailRepository.Add(transCredit); _unitOfWork.SaveChanges(); }
public void DeleteSalesReturn(int salesReturnID, int userID) { using (var trans = _unitOfWork.BeginTransaction()) { try { DateTime serverTime = DateTime.Now; Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_SALESRETURN).FirstOrDefault(); SalesReturn salesReturn = _salesReturnRepository.GetById(salesReturnID); salesReturn.Status = (int)DbConstant.DefaultDataStatus.Deleted; salesReturn.ModifyDate = serverTime; salesReturn.ModifyUserId = userID; _salesReturnRepository.AttachNavigation(salesReturn.CreateUser); _salesReturnRepository.AttachNavigation(salesReturn.ModifyUser); _salesReturnRepository.AttachNavigation(salesReturn.Invoice); _salesReturnRepository.Update(salesReturn); _unitOfWork.SaveChanges(); List <SalesReturnDetail> listDetail = _salesReturnDetailRepository.GetMany(x => x.SalesReturnId == salesReturnID).ToList(); List <ReturnViewModel> listReturn = listDetail .GroupBy(l => l.InvoiceDetail.SPKDetailSparepartDetail.SPKDetailSparepart.SparepartId) .Select(cl => new ReturnViewModel { SparepartId = cl.First().InvoiceDetail.SPKDetailSparepartDetail.SPKDetailSparepart.SparepartId, ReturQty = cl.Count(), }).ToList(); List <PurchasingDetail> listPurchasingDetail = new List <PurchasingDetail>(); List <SparepartManualTransaction> listSparepartManualTrans = new List <SparepartManualTransaction>(); foreach (var itemDetail in listDetail) { itemDetail.Status = (int)DbConstant.DefaultDataStatus.Deleted; itemDetail.ModifyDate = serverTime; itemDetail.ModifyUserId = userID; _salesReturnDetailRepository.AttachNavigation(itemDetail.CreateUser); _salesReturnDetailRepository.AttachNavigation(itemDetail.ModifyUser); _salesReturnDetailRepository.AttachNavigation(itemDetail.SalesReturn); _salesReturnDetailRepository.AttachNavigation(itemDetail.InvoiceDetail); _salesReturnDetailRepository.Update(itemDetail); if (itemDetail.InvoiceDetail.SPKDetailSparepartDetail.PurchasingDetail != null) { listPurchasingDetail.Add(itemDetail.InvoiceDetail.SPKDetailSparepartDetail.PurchasingDetail); } if (itemDetail.InvoiceDetail.SPKDetailSparepartDetail.SparepartManualTransaction != null) { listSparepartManualTrans.Add(itemDetail.InvoiceDetail.SPKDetailSparepartDetail.SparepartManualTransaction); } } foreach (var itemReturn in listReturn) { Sparepart sparepart = _sparepartRepository.GetById(itemReturn.SparepartId); sparepart.StockQty -= itemReturn.ReturQty; _sparepartRepository.AttachNavigation(sparepart.CreateUser); _sparepartRepository.AttachNavigation(sparepart.ModifyUser); _sparepartRepository.AttachNavigation(sparepart.CategoryReference); _sparepartRepository.AttachNavigation(sparepart.UnitReference); _sparepartRepository.Update(sparepart); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userID; stockCard.PurchaseDate = serverTime; stockCard.PrimaryKeyValue = salesReturn.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = sparepart.Id; stockCard.Description = "Pembatalan Retur Penjualan"; stockCard.QtyOut = itemReturn.ReturQty; stockCard.QtyOutPrice = Convert.ToDouble(listPurchasingDetail.Sum(x => x.Price) + listSparepartManualTrans.Sum(x => x.Price)); SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepart.Id); double lastStock = 0; double lastStockPrice = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; lastStockPrice = lastStockCard.QtyLastPrice; } stockCard.QtyFirst = lastStock; stockCard.QtyFirstPrice = lastStockPrice; stockCard.QtyLast = lastStock - stockCard.QtyOut; stockCard.QtyLastPrice = lastStockPrice - stockCard.QtyOutPrice; _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); stockCard = _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); if (listPurchasingDetail.Count > 0) { List <PurchasingDetailViewModel> listPurchasing = listPurchasingDetail .GroupBy(l => l.PurchasingId) .Select(cl => new PurchasingDetailViewModel { PurchasingId = cl.Key, Qty = cl.Count(), Price = cl.First().Price }).ToList(); foreach (var itemPurchasing in listPurchasing) { SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(itemPurchasing.Price); stockCardDtail.QtyOut = itemPurchasing.Qty; stockCardDtail.QtyOutPrice = Convert.ToDouble(itemPurchasing.Qty * itemPurchasing.Price); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByPurchasingId(sparepart.Id, itemPurchasing.PurchasingId); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail - stockCardDtail.QtyOut; stockCardDtail.QtyLastPrice = lastStockDetailPrice - stockCardDtail.QtyOutPrice; stockCardDtail.PurchasingId = itemPurchasing.PurchasingId; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); PurchasingDetail pDetail = _purchasingDetailRepository.GetById(itemPurchasing.Id); pDetail.ModifyDate = serverTime; pDetail.ModifyUserId = userID; pDetail.QtyRemaining = pDetail.QtyRemaining - itemPurchasing.Qty; _purchasingDetailRepository.AttachNavigation(pDetail.Purchasing); _purchasingDetailRepository.AttachNavigation(pDetail.Sparepart); _purchasingDetailRepository.AttachNavigation(pDetail.CreateUser); _purchasingDetailRepository.AttachNavigation(pDetail.ModifyUser); _purchasingDetailRepository.Update(pDetail); _unitOfWork.SaveChanges(); } } if (listSparepartManualTrans.Count > 0) { List <SparepartManualTransactionViewModel> listSpManual = listSparepartManualTrans .GroupBy(l => l.Id) .Select(cl => new SparepartManualTransactionViewModel { Id = cl.Key, Qty = cl.Count(), Price = cl.First().Price }).ToList(); foreach (var itemSpTrans in listSpManual) { SparepartStockCardDetail stockCardDtail = new SparepartStockCardDetail(); stockCardDtail.ParentStockCard = stockCard; stockCardDtail.PricePerItem = Convert.ToDouble(itemSpTrans.Price); stockCardDtail.QtyOut = 1; stockCardDtail.QtyOutPrice = Convert.ToDouble(1 * itemSpTrans.Price); SparepartStockCardDetail lastStockCardDetail = _sparepartStokCardDetailRepository.RetrieveLastCardDetailByTransactionManualId(sparepart.Id, itemSpTrans.Id); double lastStockDetail = 0; double lastStockDetailPrice = 0; if (lastStockCardDetail != null) { lastStockDetail = lastStockCardDetail.QtyLast; lastStockDetailPrice = lastStockCardDetail.QtyLastPrice; } stockCardDtail.QtyFirst = lastStockDetail; stockCardDtail.QtyFirstPrice = lastStockDetailPrice; stockCardDtail.QtyLast = lastStockDetail - stockCardDtail.QtyOut; stockCardDtail.QtyLastPrice = lastStockDetailPrice - stockCardDtail.QtyOutPrice; stockCardDtail.SparepartManualTransactionId = itemSpTrans.Id; _sparepartStokCardDetailRepository.AttachNavigation(stockCardDtail.ParentStockCard); _sparepartStokCardDetailRepository.Add(stockCardDtail); _unitOfWork.SaveChanges(); SparepartManualTransaction spManual = _sparepartManualTransactionRepository.GetById(itemSpTrans.Id); spManual.ModifyDate = serverTime; spManual.ModifyUserId = userID; spManual.QtyRemaining = spManual.QtyRemaining - 1; _sparepartManualTransactionRepository.AttachNavigation(spManual.UpdateType); _sparepartManualTransactionRepository.AttachNavigation(spManual.Sparepart); _sparepartManualTransactionRepository.AttachNavigation(spManual.CreateUser); _sparepartManualTransactionRepository.AttachNavigation(spManual.ModifyUser); _sparepartManualTransactionRepository.Update(spManual); _unitOfWork.SaveChanges(); } } } _unitOfWork.SaveChanges(); Transaction transaction = _transactionRepository.GetMany(x => x.PrimaryKeyValue == salesReturnID && x.ReferenceTableId == transactionReferenceTable.Id).FirstOrDefault(); transaction.Status = (int)DbConstant.DefaultDataStatus.Deleted; transaction.ModifyDate = serverTime; transaction.ModifyUserId = userID; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.AttachNavigation(transaction.ReferenceTable); _transactionRepository.Update(transaction); Invoice invoice = _invoiceRepository.GetById(salesReturn.InvoiceId); invoice.Status = (int)DbConstant.InvoiceStatus.Printed; invoice.ModifyDate = serverTime; invoice.ModifyUserId = userID; if (invoice.TotalPrice != invoice.TotalHasPaid && (invoice.TotalPrice - invoice.TotalHasPaid) >= (decimal)transaction.TotalTransaction) { invoice.TotalHasPaid -= (decimal)transaction.TotalTransaction; } if (invoice.TotalPrice == invoice.TotalHasPaid) { invoice.PaymentStatus = (int)DbConstant.PaymentStatus.Settled; } else { invoice.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled; } _invoiceRepository.AttachNavigation(invoice.CreateUser); _invoiceRepository.AttachNavigation(invoice.ModifyUser); _invoiceRepository.AttachNavigation(invoice.PaymentMethod); _invoiceRepository.AttachNavigation(invoice.SPK); _unitOfWork.SaveChanges(); trans.Commit(); } catch (Exception) { trans.Rollback(); throw; } } }
public void UpdateInvoice(InvoiceViewModel invoice, List <InvoiceDetailViewModel> invoiceDetails, int userId) { using (var trans = _unitOfWork.BeginTransaction()) { try { DateTime serverTime = DateTime.Now; Invoice entity = _invoiceRepository.GetById <int>(invoice.Id); entity.CreateDate = invoice.CreateDate; entity.PaymentMethodId = invoice.PaymentMethodId; entity.TotalHasPaid = invoice.TotalHasPaid; entity.TotalPrice = invoice.TotalPrice; entity.TotalService = invoice.TotalService; entity.TotalFeeService = invoice.TotalFeeService; entity.TotalServicePlusFee = invoice.TotalServicePlusFee; entity.TotalSparepart = invoice.TotalSparepart; entity.TotalFeeSparepart = invoice.TotalFeeSparepart; entity.TotalSparepartPlusFee = invoice.TotalSparepartPlusFee; entity.TotalSparepartAndService = invoice.TotalSparepartAndService; entity.TotalValueAdded = invoice.TotalValueAdded; //Map(invoice, entity); entity.ModifyDate = serverTime; entity.ModifyUserId = userId; entity.Status = (int)DbConstant.InvoiceStatus.NotPrinted; if (entity.TotalHasPaid == entity.TotalPrice) { entity.PaymentStatus = (int)DbConstant.PaymentStatus.Settled; } else { entity.PaymentStatus = (int)DbConstant.PaymentStatus.NotSettled; } _invoiceRepository.AttachNavigation(entity.CreateUser); // yang inherit ke base modifier harus ada ini, klo gak user e dobel2 _invoiceRepository.AttachNavigation(entity.ModifyUser); // yang inherit ke base modifier harus ada ini, klo gak user e dobel2 _invoiceRepository.AttachNavigation(entity.SPK); _invoiceRepository.AttachNavigation(entity.PaymentMethod); _invoiceRepository.Update(entity); _unitOfWork.SaveChanges(); foreach (var invoiceDetail in invoiceDetails) { InvoiceDetail entityDetail = _invoiceDetailRepository.GetById <int>(invoiceDetail.Id); entityDetail.FeePctg = invoiceDetail.FeePctg; entityDetail.SubTotalPrice = invoiceDetail.SubTotalPrice; //Map(invoiceDetail, entityDetail); entityDetail.ModifyDate = serverTime; entityDetail.ModifyUserId = userId; _invoiceDetailRepository.AttachNavigation(entityDetail.CreateUser); _invoiceDetailRepository.AttachNavigation(entityDetail.ModifyUser); _invoiceDetailRepository.AttachNavigation(entityDetail.Invoice); _invoiceDetailRepository.AttachNavigation(entityDetail.SPKDetailSparepartDetail); _invoiceDetailRepository.Update(entityDetail); } _unitOfWork.SaveChanges(); Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_INVOICE).FirstOrDefault(); Transaction transaction = _transactionRepository.GetMany(x => x.ReferenceTableId == transactionReferenceTable.Id && x.PrimaryKeyValue == invoice.Id).OrderBy(x => x.CreateDate).FirstOrDefault(); Reference paymentMethod = _referenceRepository.GetById(invoice.PaymentMethodId); if (transaction != null) { transaction.ModifyDate = serverTime; transaction.ModifyUserId = userId; transaction.TotalTransaction = invoice.TotalPrice.AsDouble(); transaction.TotalPayment = invoice.TotalHasPaid.AsDouble(); transaction.PaymentMethodId = invoice.PaymentMethodId; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.ReferenceTable); _transactionRepository.AttachNavigation(transaction.PaymentMethod); _transactionRepository.Update(transaction); _unitOfWork.SaveChanges(); List <TransactionDetail> transactionDetails = _transactionDetailRepository.GetMany(x => x.ParentId == transaction.Id).ToList(); foreach (TransactionDetail transactionDetail in transactionDetails) { _transactionDetailRepository.Delete(transactionDetail); } _unitOfWork.SaveChanges(); } else { transaction = new Transaction(); transaction.CreateDate = serverTime; transaction.CreateUserId = userId; transaction.ModifyDate = serverTime; transaction.ModifyUserId = userId; transaction.Description = "pembayaran invoice"; transaction.TotalTransaction = invoice.TotalPrice.AsDouble(); transaction.TotalPayment = invoice.TotalHasPaid.AsDouble(); transaction.ReferenceTableId = transactionReferenceTable.Id; transaction.PrimaryKeyValue = invoice.Id; transaction.TransactionDate = serverTime; transaction.PaymentMethodId = invoice.PaymentMethodId; transaction.Status = (int)DbConstant.DefaultDataStatus.Active; _transactionRepository.AttachNavigation(transaction.CreateUser); _transactionRepository.AttachNavigation(transaction.ModifyUser); _transactionRepository.AttachNavigation(transaction.ReferenceTable); _transactionRepository.AttachNavigation(transaction.PaymentMethod); transaction = _transactionRepository.Add(transaction); _unitOfWork.SaveChanges(); } switch (paymentMethod.Code) { case DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_EKONOMI: case DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_BCA1: case DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_BCA2: { // Bank Debet --> Karena bertmbah TransactionDetail detailBank = new TransactionDetail(); detailBank.Debit = invoice.TotalHasPaid; if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_EKONOMI) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id; } else if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_BCA1) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id; } else if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_BANK_BCA2) { detailBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id; } detailBank.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailBank.Journal); _transactionDetailRepository.AttachNavigation(detailBank.Parent); _transactionDetailRepository.Add(detailBank); break; } case DbConstant.REF_INVOICE_PAYMENTMETHOD_KAS: // Kas Debit --> Karena bertambah TransactionDetail detailKas = new TransactionDetail(); detailKas.Debit = invoice.TotalHasPaid; detailKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id; detailKas.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailKas.Journal); _transactionDetailRepository.AttachNavigation(detailKas.Parent); _transactionDetailRepository.Add(detailKas); break; case DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_KAS: // Kas Debit --> Karena bertambah TransactionDetail detailKasKarenaUangMuka = new TransactionDetail(); detailKasKarenaUangMuka.Debit = invoice.TotalHasPaid; detailKasKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.01.01").FirstOrDefault().Id; detailKasKarenaUangMuka.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Journal); _transactionDetailRepository.AttachNavigation(detailKasKarenaUangMuka.Parent); _transactionDetailRepository.Add(detailKasKarenaUangMuka); // Uang Muka Debit --> Karena bertambah TransactionDetail detailUangMukaBertambahKarenaKas = new TransactionDetail(); detailUangMukaBertambahKarenaKas.Debit = invoice.TotalHasPaid; detailUangMukaBertambahKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBertambahKarenaKas.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaKas.Parent); _transactionDetailRepository.Add(detailUangMukaBertambahKarenaKas); // Uang Muka Kredit --> Karena berkurang TransactionDetail detailUangMukaBerkurangKarenaKas = new TransactionDetail(); detailUangMukaBerkurangKarenaKas.Credit = invoice.TotalHasPaid; detailUangMukaBerkurangKarenaKas.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBerkurangKarenaKas.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaKas.Parent); _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaKas); break; case DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI: case DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1: case DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2: { // Bank Debit --> Karena bertambah TransactionDetail detailBankKarenaUangMuka = new TransactionDetail(); detailBankKarenaUangMuka.Debit = invoice.TotalHasPaid; if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.01").FirstOrDefault().Id; } else if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.02").FirstOrDefault().Id; } else if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2) { detailBankKarenaUangMuka.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.02.03").FirstOrDefault().Id; } detailBankKarenaUangMuka.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Journal); _transactionDetailRepository.AttachNavigation(detailBankKarenaUangMuka.Parent); _transactionDetailRepository.Add(detailBankKarenaUangMuka); // Uang Muka Debit --> Karena bertambah TransactionDetail detailUangMukaBertambahKarenaBank = new TransactionDetail(); detailUangMukaBertambahKarenaBank.Debit = invoice.TotalHasPaid; detailUangMukaBertambahKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBertambahKarenaBank.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBertambahKarenaBank.Parent); _transactionDetailRepository.Add(detailUangMukaBertambahKarenaBank); // Uang Muka Kredit --> Karena berkurang TransactionDetail detailUangMukaBerkurangKarenaBank = new TransactionDetail(); detailUangMukaBerkurangKarenaBank.Credit = invoice.TotalHasPaid; detailUangMukaBerkurangKarenaBank.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.05.01.01").FirstOrDefault().Id; detailUangMukaBerkurangKarenaBank.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Journal); _transactionDetailRepository.AttachNavigation(detailUangMukaBerkurangKarenaBank.Parent); _transactionDetailRepository.Add(detailUangMukaBerkurangKarenaBank); break; } case DbConstant.REF_INVOICE_PAYMENTMETHOD_PIUTANG: TransactionDetail piutang = new TransactionDetail(); piutang.Debit = invoice.TotalPrice - invoice.TotalHasPaid; piutang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.03.01.01").FirstOrDefault().Id; piutang.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(piutang.Journal); _transactionDetailRepository.AttachNavigation(piutang.Parent); _transactionDetailRepository.Add(piutang); break; } if (paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_EKONOMI || paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA1 || paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_BANK_BCA2 || paymentMethod.Code == DbConstant.REF_INVOICE_PAYMENTMETHOD_UANGMUKA_KAS) { if (invoice.TotalPrice > invoice.TotalHasPaid) { // Piutang Debit --> Karena bertambah TransactionDetail piutang = new TransactionDetail(); piutang.Debit = invoice.TotalPrice - invoice.TotalHasPaid; piutang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.03.01.01").FirstOrDefault().Id; piutang.Parent = transaction; _transactionDetailRepository.AttachNavigation(piutang.Journal); _transactionDetailRepository.AttachNavigation(piutang.Parent); _transactionDetailRepository.Add(piutang); } } // Sales Kredit --> Karena berkurang TransactionDetail sales = new TransactionDetail(); sales.Credit = invoice.TotalSparepartAndService; sales.JournalId = _journalMasterRepository.GetMany(j => j.Code == "3.01.01").FirstOrDefault().Id; sales.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(sales.Journal); _transactionDetailRepository.AttachNavigation(sales.Parent); _transactionDetailRepository.Add(sales); // Service Income Kredit --> Karena berkurang TransactionDetail serviceIncome = new TransactionDetail(); serviceIncome.Credit = invoice.TotalValueAdded + invoice.TotalFeeSparepart; serviceIncome.JournalId = _journalMasterRepository.GetMany(j => j.Code == "3.01.04").FirstOrDefault().Id; serviceIncome.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(serviceIncome.Journal); _transactionDetailRepository.AttachNavigation(serviceIncome.Parent); _transactionDetailRepository.Add(serviceIncome); // HPP Sparepart Debit --> Karena bertambah TransactionDetail hppSparepart = new TransactionDetail(); hppSparepart.Debit = invoice.TotalSparepartPlusFee; hppSparepart.JournalId = _journalMasterRepository.GetMany(j => j.Code == "3.04.01").FirstOrDefault().Id; hppSparepart.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(hppSparepart.Journal); _transactionDetailRepository.AttachNavigation(hppSparepart.Parent); _transactionDetailRepository.Add(hppSparepart); if (invoice.TotalServicePlusFee > 0) { if (entity.SPK.isContractWork) { // HPP Tukang Harian Debit --> Karena bertambah TransactionDetail hppTukang = new TransactionDetail(); hppTukang.Debit = invoice.TotalServicePlusFee; hppTukang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "3.04.05").FirstOrDefault().Id; hppTukang.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(hppTukang.Journal); _transactionDetailRepository.AttachNavigation(hppTukang.Parent); _transactionDetailRepository.Add(hppTukang); } else { // HPP Tukang Borongan Debit --> Karena bertambah TransactionDetail hppTukang = new TransactionDetail(); hppTukang.Debit = invoice.TotalServicePlusFee; hppTukang.JournalId = _journalMasterRepository.GetMany(j => j.Code == "3.04.04").FirstOrDefault().Id; hppTukang.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(hppTukang.Journal); _transactionDetailRepository.AttachNavigation(hppTukang.Parent); _transactionDetailRepository.Add(hppTukang); } } // Sparepart Kredit --> Karena berkurang TransactionDetail detailSparepart = new TransactionDetail(); detailSparepart.Credit = invoice.TotalSparepart; detailSparepart.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.04.01").FirstOrDefault().Id; detailSparepart.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailSparepart.Journal); _transactionDetailRepository.AttachNavigation(detailSparepart.Parent); _transactionDetailRepository.Add(detailSparepart); if (invoice.TotalServicePlusFee > 0) { // SDM Kredit --> Karena berkurang TransactionDetail detailSDM = new TransactionDetail(); detailSDM.Credit = invoice.TotalServicePlusFee; detailSDM.JournalId = _journalMasterRepository.GetMany(j => j.Code == "1.01.04.04").FirstOrDefault().Id; detailSDM.ParentId = transaction.Id; _transactionDetailRepository.AttachNavigation(detailSDM.Journal); _transactionDetailRepository.AttachNavigation(detailSDM.Parent); _transactionDetailRepository.Add(detailSDM); } _unitOfWork.SaveChanges(); trans.Commit(); } catch (Exception) { trans.Rollback(); throw; } } }