Пример #1
0
        public static bool Add(Session pSession, ProcessArticleStockMode pMode, FIN_DocumentFinanceDetail pDocumentDetail, ERP_Customer pCustomer, int pOrd, DateTime pDocumentDate, string pDocumentNumber, FIN_Article pArticle, decimal pQuantity, string pNotes)
        {
            //Log4Net
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            bool    result   = false;
            decimal quantity = 0.0m;

            try
            {
                switch (pMode)
                {
                case ProcessArticleStockMode.Out:
                    quantity = -(pQuantity);
                    break;

                case ProcessArticleStockMode.In:
                    quantity = pQuantity;
                    break;
                }

                //Get Objects in same Session
                ERP_Customer customer = (ERP_Customer)pSession.GetObjectByKey(typeof(ERP_Customer), pCustomer.Oid);
                FIN_Article  article  = (FIN_Article)pSession.GetObjectByKey(typeof(FIN_Article), pArticle.Oid);
                POS_ConfigurationPlaceTerminal terminal = (POS_ConfigurationPlaceTerminal)pSession.GetObjectByKey(typeof(POS_ConfigurationPlaceTerminal), GlobalFramework.LoggedTerminal.Oid);
                SYS_UserDetail userDetail = (SYS_UserDetail)pSession.GetObjectByKey(typeof(SYS_UserDetail), GlobalFramework.LoggedUser.Oid);

                FIN_ArticleStock articleStock = new FIN_ArticleStock(pSession)
                {
                    Customer     = customer,
                    Date         = pDocumentDate,
                    Article      = article,
                    Quantity     = quantity,
                    Notes        = pNotes,
                    CreatedWhere = terminal,
                    CreatedBy    = userDetail
                };
                if (pDocumentNumber != string.Empty)
                {
                    articleStock.DocumentNumber = pDocumentNumber;
                }
                if (pDocumentDetail != null)
                {
                    articleStock.DocumentNumber = pDocumentDetail.DocumentMaster.DocumentNumber;
                    articleStock.DocumentMaster = pDocumentDetail.DocumentMaster;
                    articleStock.DocumentDetail = pDocumentDetail;
                }

                //Only saves if not Working on a Unit Of Work Transaction
                if (pSession.GetType() != typeof(UnitOfWork))
                {
                    articleStock.Save();
                }

                //Audit
                switch (pMode)
                {
                case ProcessArticleStockMode.Out:
                    FrameworkUtils.Audit("STOCK_MOVEMENT_OUT", string.Format(Resx.audit_message_stock_movement_out, article.Designation, FrameworkUtils.DecimalToString(quantity, SettingsApp.DecimalFormatStockQuantity)));
                    break;

                case ProcessArticleStockMode.In:
                    FrameworkUtils.Audit("STOCK_MOVEMENT_IN", string.Format(Resx.audit_message_stock_movement_in, article.Designation, FrameworkUtils.DecimalToString(quantity, SettingsApp.DecimalFormatStockQuantity)));
                    break;
                }

                result = true;
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
            }

            return(result);
        }
Пример #2
0
 public static bool Add(ProcessArticleStockMode pMode, ProcessArticleStockParameter pParameter)
 {
     return(Add(pMode, pParameter.Customer, 10, pParameter.DocumentDate, pParameter.DocumentNumber, pParameter.Article, pParameter.Quantity, pParameter.Notes));
 }
Пример #3
0
 public static bool Add(Session pSession, ProcessArticleStockMode pMode, ERP_Customer pCustomer, int pOrd, DateTime pDocumentDate, string pDocumentNumber, FIN_Article pArticle, decimal pQuantity, string pNotes)
 {
     return(Add(GlobalFramework.SessionXpo, pMode, null, pCustomer, 10, pDocumentDate, pDocumentNumber, pArticle, pQuantity, pNotes));
 }
Пример #4
0
        /// <summary>
        /// If ProcessArticleStockMode.None
        /// </summary>
        public static bool Add(
            FIN_DocumentFinanceMaster pDocumentFinanceMaster,
            // Used to force ReverseStockMode, used in cancel Documents to restore Stocks
            bool pReverseStockMode = false
            )
        {
            //Log4Net
            log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            bool result = false;
            int  ord    = 0;

            // Check if Works with Stock
            ProcessArticleStockMode mode = (pDocumentFinanceMaster.DocumentType.StockMode > 0)
                ? (ProcessArticleStockMode)pDocumentFinanceMaster.DocumentType.StockMode
                : ProcessArticleStockMode.None
            ;

            try
            {
                //Only Process if has a Valid Mode and a valid article Class
                if (mode != ProcessArticleStockMode.None)
                {
                    // ReverseStockMode : Used for ex when we cancal Finance Documents to Restore/Revert Stock
                    if (pReverseStockMode && mode.Equals(ProcessArticleStockMode.Out))
                    {
                        mode = ProcessArticleStockMode.In;
                    }
                    else if (pReverseStockMode && mode.Equals(ProcessArticleStockMode.In))
                    {
                        mode = ProcessArticleStockMode.Out;
                    }

                    using (UnitOfWork uowSession = new UnitOfWork())
                    {
                        try
                        {
                            //Get Objects in same Session
                            FIN_DocumentFinanceMaster documentFinanceMaster = (FIN_DocumentFinanceMaster)uowSession.GetObjectByKey(typeof(FIN_DocumentFinanceMaster), pDocumentFinanceMaster.Oid);
                            ERP_Customer customer = (ERP_Customer)uowSession.GetObjectByKey(typeof(ERP_Customer), pDocumentFinanceMaster.EntityOid);

                            foreach (FIN_DocumentFinanceDetail item in documentFinanceMaster.DocumentDetail)
                            {
                                //Check if article works in Stock
                                if (item.Article.Class.WorkInStock)
                                {
                                    //Increment Order
                                    ord += 10;
                                    Add(
                                        uowSession,
                                        mode, item,
                                        customer, ord, documentFinanceMaster.Date, documentFinanceMaster.DocumentNumber,
                                        item.Article,
                                        // ReverseStock
                                        item.Quantity,
                                        item.Notes
                                        );
                                }
                            }
                            uowSession.CommitChanges();
                        }
                        catch (Exception ex)
                        {
                            uowSession.RollbackTransaction();
                            log.Error(ex.Message, ex);
                        }
                    }
                    result = true;
                }
            }
            catch (Exception ex)
            {
                log.Debug(ex.Message);
            }

            return(result);
        }