Example #1
0
        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;
                    sparepartManualTransaction.QtyRemaining    = sparepartManualTransaction.Qty;
                    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          transactionReferenceTable = _referenceRepository.GetMany(c => c.Code == DbConstant.REF_TRANSTBL_SPAREPARTMANUAL).FirstOrDefault();
                        SparepartStockCard stockCard = new SparepartStockCard();
                        stockCard.CreateUserId     = userId;
                        stockCard.PurchaseDate     = 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";

                            sparepartUpdated.StockQty += sparepartManualTransaction.Qty;
                            stockCard.QtyIn            = sparepartManualTransaction.Qty;
                            stockCard.QtyInPrice       = (sparepartManualTransaction.Qty * sparepartManualTransaction.Price).AsDouble();

                            for (int i = 1; i <= sparepartManualTransaction.Qty; i++)
                            {
                                if (!string.IsNullOrEmpty(sparepartManualTransaction.SerialNumber))
                                {
                                    SpecialSparepartDetail wDetail = new SpecialSparepartDetail();
                                    wDetail.Sparepart = manualTransaction.Sparepart;
                                    wDetail.SparepartManualTransaction = manualTransaction;
                                    wDetail.SerialNumber = sparepartManualTransaction.SerialNumber;
                                    wDetail.CreateDate   = serverTime;
                                    wDetail.CreateUserId = userId;
                                    wDetail.ModifyUserId = userId;
                                    wDetail.ModifyDate   = serverTime;
                                    wDetail.Status       = (int)DbConstant.WheelDetailStatus.Ready;

                                    _specialSparepartDetailRepository.AttachNavigation(manualTransaction.CreateUser);
                                    _specialSparepartDetailRepository.AttachNavigation(manualTransaction.ModifyUser);
                                    _specialSparepartDetailRepository.AttachNavigation(manualTransaction.Sparepart);
                                    _specialSparepartDetailRepository.AttachNavigation(manualTransaction);
                                    _specialSparepartDetailRepository.Add(wDetail);

                                    _unitOfWork.SaveChanges();
                                }
                            }
                        }
                        else if (updateType.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_MINUS)
                        {
                            stockCard.Description      = "Pengurangan stok awal";
                            sparepartUpdated.StockQty -= sparepartManualTransaction.Qty;
                            stockCard.QtyOut           = sparepartManualTransaction.Qty;
                            stockCard.QtyOutPrice      = (sparepartManualTransaction.Qty * sparepartManualTransaction.Price).AsDouble();
                        }

                        SparepartStockCard lastStockCard  = _sparepartStockCardRepository.RetrieveLastCard(manualTransaction.SparepartId);
                        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.QtyOut);
                        stockCard.QtyLastPrice  = lastStockPrice + (stockCard.QtyInPrice - stockCard.QtyOutPrice);

                        _sparepartStockCardRepository.AttachNavigation(stockCard.CreateUser);
                        _sparepartStockCardRepository.AttachNavigation(stockCard.Sparepart);
                        _sparepartStockCardRepository.AttachNavigation(stockCard.ReferenceTable);
                        stockCard = _sparepartStockCardRepository.Add(stockCard);
                        _unitOfWork.SaveChanges();

                        SparepartStockCardDetail stockCardDetail = new SparepartStockCardDetail();
                        stockCardDetail.ParentStockCard = stockCard;
                        stockCardDetail.PricePerItem    = Convert.ToDouble(manualTransaction.Price);
                        stockCardDetail.QtyIn           = manualTransaction.Qty;
                        stockCardDetail.QtyInPrice      = Convert.ToDouble(manualTransaction.Price * manualTransaction.Qty);
                        stockCardDetail.QtyOut          = 0;
                        stockCardDetail.QtyOutPrice     = 0;
                        SparepartStockCardDetail lastStockCardDetail = _sparepartStockCardDetailRepository.RetrieveLastCardDetailByPurchasingId(manualTransaction.SparepartId, manualTransaction.Id);
                        double lastStockDetail      = 0;
                        double lastStockDetailPrice = 0;
                        if (lastStockCardDetail != null)
                        {
                            lastStockDetail      = lastStockCardDetail.QtyLast;
                            lastStockDetailPrice = lastStockCardDetail.QtyLastPrice;
                        }
                        stockCardDetail.QtyFirst      = lastStockDetail;
                        stockCardDetail.QtyFirstPrice = lastStockDetailPrice;
                        stockCardDetail.QtyLast       = manualTransaction.Qty;
                        stockCardDetail.QtyLastPrice  = Convert.ToDouble(manualTransaction.Price * manualTransaction.Qty);
                        stockCardDetail.SparepartManualTransactionId = manualTransaction.Id;
                        _sparepartStockCardDetailRepository.AttachNavigation(stockCardDetail.ParentStockCard);
                        _sparepartStockCardDetailRepository.Add(stockCardDetail);

                        _sparepartRepository.AttachNavigation(sparepartUpdated.CreateUser);
                        _sparepartRepository.AttachNavigation(sparepartUpdated.ModifyUser);
                        _sparepartRepository.AttachNavigation(sparepartUpdated.CategoryReference);
                        _sparepartRepository.AttachNavigation(sparepartUpdated.UnitReference);
                        _sparepartRepository.Update(sparepartUpdated);
                        _unitOfWork.SaveChanges();
                        trans.Commit();
                    }
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw;
                }
            }
        }
Example #2
0
        public void UpdateSparepartManualTransaction(SparepartManualTransactionViewModel sparepartManualTransaction, int userId)
        {
            DateTime serverTime = DateTime.Now;

            sparepartManualTransaction.ModifyDate   = serverTime;
            sparepartManualTransaction.ModifyUserId = userId;
            sparepartManualTransaction.QtyRemaining = sparepartManualTransaction.Qty;
            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.PurchaseDate     = serverTime;
                stockCard.ReferenceTableId = transactionReferenceTable.Id;
                stockCard.PrimaryKeyValue  = manualTransactionOld.Id;
                stockCard.SparepartId      = sparepartManualTransaction.SparepartId;

                SparepartStockCardDetail stockCardDetail = new SparepartStockCardDetail();
                stockCardDetail.SparepartManualTransactionId = manualTransactionOld.Id;

                SparepartStockCard lastStockCard = _sparepartStockCardRepository.RetrieveLastCard(sparepartManualTransaction.SparepartId);
                double             lastStock     = 0;
                double             lastPrice     = 0;
                if (lastStockCard != null)
                {
                    lastStock = lastStockCard.QtyLast;
                    lastPrice = lastStockCard.PricePerItem;
                }

                stockCard.QtyFirst            = lastStock;
                stockCard.QtyFirstPrice       = (stockCard.QtyFirst * lastPrice).AsDouble();
                stockCardDetail.QtyFirst      = stockCard.QtyFirst;
                stockCardDetail.QtyFirstPrice = stockCard.QtyFirstPrice;

                if (updateTypeOld.Code == (DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_PLUS))
                {
                    stockCard.Description = "Revisi pembatalan penambahan stok awal";
                    stockCard.QtyOut      = manualTransactionOld.Qty;
                    stockCard.QtyOutPrice = stockCard.QtyOut * manualTransactionOld.Price.AsDouble();

                    stockCardDetail.QtyOut      = manualTransactionOld.Qty;
                    stockCardDetail.QtyOutPrice = stockCardDetail.QtyOut * manualTransactionOld.Price.AsDouble();

                    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;
                    stockCard.QtyInPrice  = stockCard.QtyIn * manualTransactionOld.Price.AsDouble();

                    stockCardDetail.QtyIn      = manualTransactionOld.Qty;
                    stockCardDetail.QtyInPrice = stockCardDetail.QtyIn * manualTransactionOld.Price.AsDouble();

                    sparepartUpdated.StockQty += manualTransactionOld.Qty;
                }

                stockCard.QtyLast      = stockCard.QtyFirst + (stockCard.QtyIn - stockCard.QtyOut);
                stockCard.QtyLastPrice = stockCard.QtyLast * lastPrice;

                stockCardDetail.QtyLast      = stockCard.QtyLast;
                stockCardDetail.QtyLastPrice = stockCard.QtyLastPrice;

                _sparepartStockCardRepository.AttachNavigation(stockCard.CreateUser);
                _sparepartStockCardRepository.AttachNavigation(stockCard.Sparepart);
                _sparepartStockCardRepository.AttachNavigation(stockCard.ReferenceTable);
                stockCard = _sparepartStockCardRepository.Add(stockCard);

                stockCardDetail.ParentStockCard = stockCard;
                _sparepartStockCardDetailRepository.AttachNavigation(stockCardDetail.ParentStockCard);
                _sparepartStockCardDetailRepository.Add(stockCardDetail);

                _unitOfWork.SaveChanges();

                SparepartStockCard revStockCard = new SparepartStockCard();
                revStockCard.CreateUserId     = userId;
                revStockCard.PurchaseDate     = serverTime;
                revStockCard.ReferenceTableId = transactionReferenceTable.Id;
                revStockCard.PrimaryKeyValue  = manualTransactionOld.Id;
                revStockCard.SparepartId      = sparepartManualTransaction.SparepartId;

                SparepartStockCardDetail revStockCardDetail = new SparepartStockCardDetail();
                revStockCardDetail.SparepartManualTransactionId = sparepartManualTransaction.Id;

                lastStockCard = _sparepartStockCardRepository.RetrieveLastCard(sparepartManualTransaction.SparepartId);
                lastStock     = 0;
                lastPrice     = 0;
                if (lastStockCard != null)
                {
                    lastStock = lastStockCard.QtyLast;
                    lastPrice = lastStockCard.PricePerItem;
                }

                revStockCard.QtyFirst      = lastStock;
                revStockCard.QtyFirstPrice = revStockCard.QtyFirst * lastPrice;

                revStockCardDetail.QtyFirst      = revStockCard.QtyFirst;
                revStockCardDetail.QtyFirstPrice = revStockCard.QtyFirstPrice;

                if (updateTypeNew.Code == DbConstant.REF_SPAREPART_TRANSACTION_MANUAL_TYPE_PLUS)
                {
                    revStockCard.Description = "Revisi penambahan stok awal";
                    revStockCard.QtyIn       = sparepartManualTransaction.Qty;
                    revStockCard.QtyInPrice  = revStockCard.QtyIn * lastPrice;

                    revStockCardDetail.QtyIn      = revStockCard.QtyIn;
                    revStockCardDetail.QtyInPrice = revStockCard.QtyInPrice;

                    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;
                    revStockCard.QtyOutPrice = revStockCard.QtyOut * lastPrice;

                    revStockCardDetail.QtyOut      = revStockCard.QtyOut;
                    revStockCardDetail.QtyOutPrice = revStockCard.QtyOutPrice;

                    sparepartUpdated.StockQty -= sparepartManualTransaction.Qty;
                }

                revStockCard.QtyLast      = revStockCard.QtyFirst + (revStockCard.QtyIn - revStockCard.QtyOut);
                revStockCard.QtyLastPrice = revStockCard.QtyLast * lastPrice;

                revStockCardDetail.QtyLast      = revStockCard.QtyLast;
                revStockCardDetail.QtyLastPrice = revStockCard.QtyLastPrice;

                _sparepartStockCardRepository.AttachNavigation(revStockCard.CreateUser);
                _sparepartStockCardRepository.AttachNavigation(revStockCard.Sparepart);
                _sparepartStockCardRepository.AttachNavigation(revStockCard.ReferenceTable);
                revStockCard = _sparepartStockCardRepository.Add(revStockCard);

                revStockCardDetail.ParentStockCard = revStockCard;
                _sparepartStockCardDetailRepository.AttachNavigation(revStockCardDetail.ParentStockCard);
                _sparepartStockCardDetailRepository.Add(revStockCardDetail);

                SparepartManualTransaction entity = new SparepartManualTransaction();
                Map(sparepartManualTransaction, entity);
                _sparepartManualTransactionRepository.Update(entity);
                _sparepartRepository.Update(sparepartUpdated);

                _unitOfWork.SaveChanges();
            }
        }