public void InsertSparepartManualTransaction(SparepartManualTransactionViewModel sparepartManualTransaction, decimal totalPrice, int userId) { using (var trans = _unitOfWork.BeginTransaction()) { try { DateTime serverTime = DateTime.Now; sparepartManualTransaction.CreateDate = serverTime; sparepartManualTransaction.CreateUserId = userId; sparepartManualTransaction.ModifyDate = serverTime; sparepartManualTransaction.ModifyUserId = userId; sparepartManualTransaction.TransactionDate = serverTime; Reference updateType = _referenceRepository.GetById(sparepartManualTransaction.UpdateTypeId); Sparepart sparepartUpdated = _sparepartRepository.GetById(sparepartManualTransaction.SparepartId); if (updateType != null && sparepartUpdated != null) { SparepartManualTransaction entity = new SparepartManualTransaction(); Map(sparepartManualTransaction, entity); _sparepartManualTransactionRepository.AttachNavigation(entity.CreateUser); _sparepartManualTransactionRepository.AttachNavigation(entity.ModifyUser); _sparepartManualTransactionRepository.AttachNavigation(entity.Sparepart); _sparepartManualTransactionRepository.AttachNavigation(entity.UpdateType); SparepartManualTransaction manualTransaction = _sparepartManualTransactionRepository.Add(entity); _unitOfWork.SaveChanges(); //Reference referenceTransaction = _referenceRepository.GetMany(x=>x.Code == DbConstant.REF_TRANSTBL_SPAREPARTMANUAL).FirstOrDefault(); //Transaction transaction = new Transaction(); //transaction.CreateDate = serverTime; //transaction.CreateUserId = userId; //transaction.ModifyDate = serverTime; //transaction.ModifyUserId = userId; //transaction.Description = "Transaksi sparepart manual"; //transaction.ReferenceTableId = referenceTransaction.Id; //transaction.PrimaryKeyValue = 0; //transaction.TotalPayment = totalPrice.AsDouble(); //transaction.TotalTransaction = totalPrice.AsDouble(); //transaction.TransactionDate = serverTime; //transaction.Status = (int)DbConstant.DefaultDataStatus.Active; //transaction =_transactionRepository.Add(transaction); Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_SPAREPARTMANUAL).FirstOrDefault(); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userId; stockCard.CreateDate = serverTime; stockCard.PrimaryKeyValue = manualTransaction.Id; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.SparepartId = manualTransaction.SparepartId; if (updateType.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_PLUS) { stockCard.Description = "Penambahan stok awal"; //TransactionDetail transDebit = new TransactionDetail(); //transDebit.Debit = totalPrice; //transDebit.JournalId = _journalMasterRepository.GetMany(x => x.Code == "1.01.04.01").FirstOrDefault().Id; //transDebit.Parent = transaction; //_transactionDetailRepository.Add(transDebit); //TransactionDetail transCredit = new TransactionDetail(); //transCredit.Credit = totalPrice; //transCredit.JournalId = _journalMasterRepository.GetMany(x => x.Code == "9.9").FirstOrDefault().Id; //transCredit.Parent = transaction; //_transactionDetailRepository.Add(transCredit); sparepartUpdated.StockQty += sparepartManualTransaction.Qty; stockCard.QtyIn = sparepartManualTransaction.Qty; SparepartDetail lastSPDetail = _sparepartDetailRepository. GetMany(c => c.SparepartId == sparepartManualTransaction.SparepartId).OrderByDescending(c => c.Id) .FirstOrDefault(); string lastSPID = string.Empty; if (lastSPDetail != null) lastSPID = lastSPDetail.Code; for (int i = 1; i <= sparepartManualTransaction.Qty; i++) { SparepartDetail spDetail = new SparepartDetail(); if (string.IsNullOrEmpty(lastSPID)) { lastSPID = sparepartUpdated.Code + "0000000001"; } else { lastSPID = sparepartUpdated.Code + (Convert.ToInt32(lastSPID.Substring(lastSPID.Length - 10)) + 1) .ToString("D10"); } spDetail.SparepartManualTransaction = manualTransaction; spDetail.SparepartId = sparepartUpdated.Id; spDetail.Code = lastSPID; spDetail.CreateDate = serverTime; spDetail.CreateUserId = userId; spDetail.ModifyUserId = userId; spDetail.ModifyDate = serverTime; spDetail.Status = (int)DbConstant.SparepartDetailDataStatus.Active; _sparepartDetailRepository.AttachNavigation(spDetail.CreateUser); _sparepartDetailRepository.AttachNavigation(spDetail.ModifyUser); _sparepartDetailRepository.AttachNavigation(spDetail.PurchasingDetail); _sparepartDetailRepository.AttachNavigation(spDetail.Sparepart); _sparepartDetailRepository.AttachNavigation(spDetail.SparepartManualTransaction); SparepartDetail insertedSpDetail = _sparepartDetailRepository.Add(spDetail); if (!string.IsNullOrEmpty(sparepartManualTransaction.SerialNumber)) { SpecialSparepart specialSparepart = _specialSparepartRepository.GetMany(w => w.SparepartId == sparepartUpdated.Id && w.Status == (int)DbConstant.DefaultDataStatus.Active ).FirstOrDefault(); if (specialSparepart != null) { SpecialSparepartDetail wDetail = new SpecialSparepartDetail(); wDetail.SparepartDetail = insertedSpDetail; wDetail.SpecialSparepartId = specialSparepart.Id; wDetail.SerialNumber = sparepartManualTransaction.SerialNumber; wDetail.CreateDate = serverTime; wDetail.CreateUserId = userId; wDetail.ModifyUserId = userId; wDetail.ModifyDate = serverTime; wDetail.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.Add(wDetail); _unitOfWork.SaveChanges(); } } } } else if (updateType.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_MINUS) { stockCard.Description = "Pengurangan stok awal"; //TransactionDetail transCredit = new TransactionDetail(); //transCredit.Credit = totalPrice; //transCredit.JournalId = _journalMasterRepository.GetMany(x => x.Code == "1.01.04.01").FirstOrDefault().Id; //transCredit.Parent = transaction; //_transactionDetailRepository.Add(transCredit); //TransactionDetail transDebit = new TransactionDetail(); //transDebit.Debit = totalPrice; //transDebit.JournalId = _journalMasterRepository.GetMany(x => x.Code == "9.9").FirstOrDefault().Id; //transDebit.Parent = transaction; //_transactionDetailRepository.Add(transDebit); sparepartUpdated.StockQty -= sparepartManualTransaction.Qty; stockCard.QtyOut = sparepartManualTransaction.Qty; List<SparepartDetail> spDetails = _sparepartDetailRepository. GetMany(c => c.SparepartId == sparepartManualTransaction.SparepartId).OrderByDescending(c => c.Id) .Take(sparepartManualTransaction.Qty).ToList(); foreach (var spDetail in spDetails) { spDetail.ModifyUserId = userId; spDetail.ModifyDate = serverTime; spDetail.Status = (int)DbConstant.SparepartDetailDataStatus.Deleted; _sparepartDetailRepository.Update(spDetail); } } SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(manualTransaction.SparepartId); double lastStock = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; } stockCard.QtyFirst = lastStock; stockCard.QtyLast = lastStock + (stockCard.QtyIn - stockCard.QtyOut); _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); _sparepartStokCardRepository.Add(stockCard); _sparepartRepository.AttachNavigation(sparepartUpdated.CreateUser); _sparepartRepository.AttachNavigation(sparepartUpdated.ModifyUser); _sparepartRepository.AttachNavigation(sparepartUpdated.CategoryReference); _sparepartRepository.AttachNavigation(sparepartUpdated.UnitReference); _sparepartRepository.Update(sparepartUpdated); _unitOfWork.SaveChanges(); //transaction.PrimaryKeyValue = manualTransaction.Id; //_transactionRepository.Update(transaction); //_unitOfWork.SaveChanges(); trans.Commit(); } } catch (Exception) { trans.Rollback(); throw; } } }
public void UpdateSparepartManualTransaction(SparepartManualTransactionViewModel sparepartManualTransaction, int userId) { DateTime serverTime = DateTime.Now; sparepartManualTransaction.ModifyDate = serverTime; sparepartManualTransaction.ModifyUserId = userId; Reference updateTypeNew = _referenceRepository.GetById(sparepartManualTransaction.UpdateTypeId); SparepartManualTransaction manualTransactionOld = _sparepartManualTransactionRepository.GetById(sparepartManualTransaction.Id); Sparepart sparepartUpdated = _sparepartRepository.GetById(sparepartManualTransaction.SparepartId); if (manualTransactionOld != null && updateTypeNew != null && sparepartUpdated != null) { Reference updateTypeOld = _referenceRepository.GetById(manualTransactionOld.UpdateTypeId); Reference transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_SPAREPARTMANUAL).FirstOrDefault(); SparepartStockCard stockCard = new SparepartStockCard(); stockCard.CreateUserId = userId; stockCard.CreateDate = serverTime; stockCard.ReferenceTableId = transactionReferenceTable.Id; stockCard.PrimaryKeyValue = manualTransactionOld.Id; stockCard.SparepartId = sparepartManualTransaction.SparepartId; SparepartStockCard lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepartManualTransaction.SparepartId); double lastStock = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; } stockCard.QtyFirst = lastStock; if (updateTypeOld.Code == (DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_PLUS)) { stockCard.Description = "Revisi pembatalan penambahan stok awal"; stockCard.QtyOut = manualTransactionOld.Qty; sparepartUpdated.StockQty -= manualTransactionOld.Qty; } else if (updateTypeOld.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_MINUS) { stockCard.Description = "Revisi pembatalan pengurangan stok awal"; stockCard.QtyIn = manualTransactionOld.Qty; sparepartUpdated.StockQty += manualTransactionOld.Qty; } stockCard.QtyLast = stockCard.QtyFirst + (stockCard.QtyIn - stockCard.QtyOut); _sparepartStokCardRepository.AttachNavigation(stockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(stockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(stockCard.ReferenceTable); _sparepartStokCardRepository.Add(stockCard); _unitOfWork.SaveChanges(); SparepartStockCard revStockCard = new SparepartStockCard(); revStockCard.CreateUserId = userId; revStockCard.CreateDate = serverTime; revStockCard.ReferenceTableId = transactionReferenceTable.Id; revStockCard.PrimaryKeyValue = manualTransactionOld.Id; revStockCard.SparepartId = sparepartManualTransaction.SparepartId; lastStockCard = _sparepartStokCardRepository.RetrieveLastCard(sparepartManualTransaction.SparepartId); lastStock = 0; if (lastStockCard != null) { lastStock = lastStockCard.QtyLast; } revStockCard.QtyFirst = lastStock; if (updateTypeNew.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_PLUS) { revStockCard.Description = "Revisi penambahan stok awal"; revStockCard.QtyIn = sparepartManualTransaction.Qty; sparepartUpdated.StockQty += sparepartManualTransaction.Qty; } else if (updateTypeNew.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_MINUS) { revStockCard.Description = "Revisi pengurangan stok awal"; revStockCard.QtyOut = sparepartManualTransaction.Qty; sparepartUpdated.StockQty -= sparepartManualTransaction.Qty; } revStockCard.QtyLast = revStockCard.QtyFirst + (revStockCard.QtyIn - revStockCard.QtyOut); _sparepartStokCardRepository.AttachNavigation(revStockCard.CreateUser); _sparepartStokCardRepository.AttachNavigation(revStockCard.Sparepart); _sparepartStokCardRepository.AttachNavigation(revStockCard.ReferenceTable); _sparepartStokCardRepository.Add(revStockCard); SparepartManualTransaction entity = new SparepartManualTransaction(); Map(sparepartManualTransaction, entity); _sparepartManualTransactionRepository.Update(entity); _sparepartRepository.Update(sparepartUpdated); _unitOfWork.SaveChanges(); } }