Ejemplo n.º 1
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidateArticleStock())
                {
                    if (CommonFunc.ShowMessage("Are you sure? The stock quantity will be updated in the system.", Models.Enums.MessageType.OKCancel) == DialogResult.OK)
                    {
                        articleStockOutModel = new ArticleStockOutModel();
                        articleStockOutModel.StockOutReason = GetStockOutReason();
                        if (cmbFromLocation.SelectedIndex != -1)
                        {
                            articleStockOutModel.StockFromLocation = GetStockFromLocation();
                        }

                        articleStockOutModel.OrderDtlModels = FillOrderDtlDataToModel();
                        articleStockOutModel.Reason         = txtRemark.Text.Trim();

                        this.articleStockManager.SaveArticleStockOutData(articleStockOutModel);

                        CommonFunc.ShowMessage("Stock Quantity has been updated", MessageType.Information);
                        ResetArticleStockOutData();
                    }
                }
            }
            catch (Exception ex)
            {
                CommonFunc.ShowMessage(ex.Message, MessageType.Information);
                Logger.Log(ex.Message, Logger.LogingLevel.Error);
            }
        }
        public bool SaveArticleStockOutData(ArticleStockOutModel articleStockOutModel)
        {
            try
            {
                var orderHdr = new OrderHdr();
                orderHdr.OrderDtl = new List <OrderDtl>();

                //Get article codes for updating article stock
                var articleCodes = (from a in articleStockOutModel.OrderDtlModels
                                    select a.ArticleCode).ToList();

                var articleStockBalanceList = this.articleStockBalanceRepository.GetArticleStockBalanceByArticleCodes(articleCodes);

                for (int rowIndex = 0; rowIndex < articleStockOutModel.OrderDtlModels.Count(); rowIndex++)
                {
                    var articleStockBalance = articleStockBalanceList.Where(a => a.ArticleCode == articleStockOutModel.OrderDtlModels[rowIndex].ArticleCode).FirstOrDefault();
                    if (articleStockBalance != null)
                    {
                        decimal quantity = articleStockOutModel.OrderDtlModels[rowIndex].AdjustmentQty;

                        if (articleStockOutModel.StockOutReason == StockOutReason.ReturnToSupplier || articleStockOutModel.StockOutReason == StockOutReason.WriteOff)
                        {
                            articleStockBalance.PhysicalQty -= quantity;

                            switch (articleStockOutModel.StockFromLocation)
                            {
                            case StockFromLocation.Damaged:
                                articleStockBalance.TotalPhysicalNonSaleableQty -= quantity;
                                articleStockBalance.DamagedQty -= quantity;
                                break;

                            case StockFromLocation.NonSaleable:
                                articleStockBalance.TotalPhysicalNonSaleableQty -= quantity;
                                articleStockBalance.NonSaleableQty -= quantity;
                                break;

                            case StockFromLocation.Saleable:
                                articleStockBalance.TotalPhysicalSaleableQty -= quantity;
                                articleStockBalance.TotalSaleableQty         -= quantity;
                                break;
                            }
                        }
                        else
                        {
                            articleStockBalance.TotalPhysicalNonSaleableQty += quantity;
                            articleStockBalance.TotalPhysicalSaleableQty    -= quantity;
                            articleStockBalance.TotalSaleableQty            -= quantity;

                            if (articleStockOutModel.StockOutReason == StockOutReason.Damaged)
                            {
                                articleStockBalance.DamagedQty += quantity;
                            }
                            else if (articleStockOutModel.StockOutReason == StockOutReason.NonSaleable)
                            {
                                articleStockBalance.NonSaleableQty -= quantity;
                            }
                        }
                        articleStockBalance.UPDATEDON = DateTime.Now;
                        articleStockBalance.UPDATEDBY = CommonModel.UserID;
                        articleStockBalance.UPDATEDAT = CommonModel.SiteCode;
                    }
                }

                var maxTranNo = this.articleStockBalanceRepository.GetMaxTranNoInStockAdjustment();
                maxTranNo = maxTranNo + 1;
                var stockAdjustmentList = new List <StockAdjustment>();

                for (int i = 0; i < articleStockOutModel.OrderDtlModels.Count; i++)
                {
                    stockAdjustmentList.Add(new StockAdjustment
                    {
                        SiteCode    = CommonModel.SiteCode,
                        TrnNo       = maxTranNo,
                        FinYear     = CommonModel.CurrentDate.ToString("yyyy"),
                        TrnDate     = CommonModel.CurrentDate,
                        ArticleCode = articleStockOutModel.OrderDtlModels[i].ArticleCode,
                        EAN         = articleStockOutModel.OrderDtlModels[i].EAN,
                        UOM         = articleStockOutModel.OrderDtlModels[i].UnitofMeasure,
                        Qty         = articleStockOutModel.OrderDtlModels[i].AdjustmentQty,
                        Reason      = (!string.IsNullOrEmpty(articleStockOutModel.OrderDtlModels[i].Reason)) ? articleStockOutModel.OrderDtlModels[i].Reason : articleStockOutModel.Reason,
                        CREATEDAT   = CommonModel.SiteCode,
                        CREATEDBY   = CommonModel.UserID,
                        CREATEDON   = CommonModel.CurrentDate,
                        UPDATEDAT   = CommonModel.SiteCode,
                        UPDATEDBY   = CommonModel.UserID,
                        UPDATEDON   = CommonModel.CurrentDate,
                        STATUS      = true
                    });

                    maxTranNo += 1;
                }

                return(this.articleStockBalanceRepository.UpdateArticleStockOutData(articleStockBalanceList.ToList(), stockAdjustmentList));
            }
            catch (Exception ex)
            {
                Logger.Log(ex.Message, Logger.LogingLevel.Error);
                throw ex;
            }
        }