Пример #1
0
        public void Update(int productID, ProductLogModel model)
        {
            using (var uow = new UnitOfWork(new DataContext()))
            {
                var product    = uow.Products.Get(productID);
                var productLog = new ProductLog();

                if (model.Action == "Stock In")
                {
                    product.Quantity = product.Quantity + model.Quantity;
                }
                else
                {
                    // quantity to remove
                    //check for limit to be remove
                    var newQuantity = product.Quantity - model.Quantity;
                    if (newQuantity < product.Limit)
                    {
                        throw new ApplicationException("Quantity result must be greater than product limit!");
                    }
                    else
                    {
                        product.Quantity = newQuantity;
                    }
                }
                productLog.Action          = model.Action;
                productLog.CreateTimeStamp = model.Date;
                productLog.ProductID       = productID;
                productLog.Quantity        = model.Quantity;
                productLog.Remarks         = model.Remarks;
                uow.ProductLogs.Add(productLog);
                uow.Products.Edit(product);
                uow.Complete();
            }
        }
Пример #2
0
    public ActionResult View()
    {
        var productTestInfo = new ProductTestInformation();    // or get from the db
        var productlog      = new ProductLog(productTestInfo);

        return(View());
    }
Пример #3
0
        public GeneralResponse AddProductLog(AddProductLogRequestOld request)
        {
            GeneralResponse response = new GeneralResponse();

            try
            {
                ProductLog productLog = new ProductLog();

                productLog.ID                 = Guid.NewGuid();
                productLog.CreateDate         = PersianDateTime.Now;
                productLog.CreateEmployee     = _employeeRepository.FindBy(request.CreateEmployeeID);
                productLog.Note               = request.Note;
                productLog.Closed             = request.Closed;
                productLog.InputSerialNumber  = request.InputSerialNumber;
                productLog.LogDate            = request.LogDate;
                productLog.Product            = this._productRepository.FindBy(request.ProductID);
                productLog.ProductSerialFrom  = request.ProductSerialFrom;
                productLog.ProductSerialTo    = request.ProductSerialTo;
                productLog.PurchaseBillNumber = request.PurchaseBillNumber;
                productLog.PurchaseDate       = request.PurchaseDate;
                productLog.PurchaseUnitPrice  = request.PurchaseUnitPrice;
                productLog.SellerName         = request.SellerName;
                productLog.UnitsIO            = request.UnitsIO;
                productLog.RowVersion         = 1;

                #region Validation

                if (productLog.GetBrokenRules().Count() > 0)
                {
                    foreach (BusinessRule businessRule in productLog.GetBrokenRules())
                    {
                        response.ErrorMessages.Add(businessRule.Rule);
                    }

                    return(response);
                }

                #endregion

                Product product = productLog.Product;
                product.UnitsInStock += productLog.UnitsIO;
                _productRepository.Save(product);

                _productLogRepository.Add(productLog);
                _uow.Commit();
            }
            catch (Exception ex)
            {
                response.ErrorMessages.Add(ex.Message);
            }

            return(response);
        }
Пример #4
0
        public async Task LogAsync(ProductLog log)
        {
            if (log != null)
            {
                string logFilename = GetLogFileName(DateTime.UtcNow);
                using (StreamWriter streamWriter = new StreamWriter(logFilename))
                {
                    var jsonString = JsonConvert.SerializeObject(log);
                    await streamWriter.WriteLineAsync(jsonString);

                    streamWriter.Close();
                }
            }
        }
Пример #5
0
        protected virtual ProductLog CreateLog(string property, string value)
        {
            var log = new ProductLog
            {
                CreatedAt   = DateTimeOffset.UtcNow,
                Operation   = Context.Operation,
                OperationId = Context.OperationId,
                Property    = property,
                Type        = Type,
                Value       = value,
                ProductId   = Entity.Id,
                CreatedById = Context.CurrentUser.Id
            };

            Entity.ProductLogs.Add(log);
            return(log);
        }
Пример #6
0
        public ActionResult Create([Bind(Include = "ID,Name,QTY,Price,Discontinued")] Product product)
        {
            using (var ctx = new SalesDbContext())
            {
                if (ModelState.IsValid)
                {
                    product.ID = Guid.NewGuid();
                    ctx.Products.Add(product);
                    ProductLog.GenerateProductLog(ctx, product, product.QTY);

                    ctx.SaveChanges();
                    return(RedirectToAction("Index"));
                }

                return(View(product));
            }
        }
Пример #7
0
        public void Log(string user, decimal ProductId, decimal qty, string action)
        {
            ProductLog PtrLog = new ProductLog();

            try
            {
                PtrLog.User            = user;
                PtrLog.action          = action;
                PtrLog.Date            = DateTime.UtcNow;
                PtrLog.AmountPurchased = qty;

                context.ProductLog.Add(PtrLog);
                context.SaveChanges();
            }
            catch (Exception ex)
            {
            }
        }
Пример #8
0
        public void Log(string user, decimal price, decimal Oldprice, string action)
        {
            ProductLog PtrLog = new ProductLog();

            try
            {
                PtrLog.User     = user;
                PtrLog.action   = action;
                PtrLog.price    = price;
                PtrLog.Oldprice = Oldprice;
                PtrLog.Date     = DateTime.UtcNow;

                context.ProductLog.Add(PtrLog);
                context.SaveChanges();
            }
            catch (Exception ex)
            {
            }
        }
Пример #9
0
        public ActionResult Edit([Bind(Include = "ID,Name,QTY,Price,Discontinued")] Product product)
        {
            using (var ctx = new SalesDbContext())
            {
                if (ModelState.IsValid)
                {
                    var oldProduct = ctx.Products.Where(x => x.ID == product.ID).FirstOrDefault();

                    oldProduct.Name         = product.Name;
                    oldProduct.QTY          = product.QTY;
                    oldProduct.LowWarn      = product.LowWarn;
                    oldProduct.Price        = product.Price;
                    oldProduct.Discontinued = product.Discontinued;

                    ProductLog.GenerateProductLog(ctx, product, -product.QTY);
                    ctx.SaveChanges();
                    return(RedirectToAction("Index"));
                }
                return(View(product));
            }
        }
Пример #10
0
        public GetProductLogResponse GetProductLog(GetRequest request)
        {
            GetProductLogResponse response = new GetProductLogResponse();

            try
            {
                ProductLog     productLog     = new ProductLog();
                ProductLogView productLogView = productLog.ConvertToProductLogView();

                productLog = _productLogRepository.FindBy(request.ID);
                if (productLog != null)
                {
                    productLogView = productLog.ConvertToProductLogView();
                }

                response.ProductLogView = productLogView;
            }
            catch (Exception ex)
            {
            }

            return(response);
        }
Пример #11
0
        private void DeleteOrder(DataGridViewCellEventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn muốn xóa đơn hàng này?", "Xoá đơn hàng", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                DataGridViewRow currentRow = dgwOrderList.Rows[e.RowIndex];

                OrderService orderService = new OrderService();
                int          id           = ObjectHelper.GetValueFromAnonymousType <int>(currentRow.DataBoundItem, "Id");
                Order        order        = orderService.GetOrder(id);
                DateTime     systime      = BaoHienRepository.GetBaoHienDBDataContext().GetSystemDate();

                #region CustomerLog

                CustomerLogService cls = new CustomerLogService();
                CustomerLog        cl  = cls.GetCustomerLog(order.OrderCode);
                bool kq = true;
                if (cl != null)
                {
                    kq = cls.DeleteCustomerLog(cl.Id);
                }

                #endregion

                #region ProductLog

                ProductLogService  productLogService = new ProductLogService();
                OrderDetailService orderDetailService = new OrderDetailService();
                List <OrderDetail> details = orderDetailService.SelectOrderDetailByWhere(x => x.OrderId == order.Id).ToList();
                ProductLog         pl, newpl;
                foreach (OrderDetail item in details)
                {
                    pl    = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                    newpl = new ProductLog()
                    {
                        ProductId    = item.ProductId,
                        AttributeId  = item.AttributeId,
                        UnitId       = item.UnitId,
                        BeforeNumber = pl.AfterNumber,
                        Amount       = item.NumberUnit,
                        AfterNumber  = pl.AfterNumber + item.NumberUnit,
                        RecordCode   = order.OrderCode,
                        Status       = BHConstant.DEACTIVE_STATUS,
                        Direction    = BHConstant.DIRECTION_IN,
                        UpdatedDate  = systime
                    };
                    productLogService.AddProductLog(newpl);
                }
                productLogService.DeactiveProductLog(order.OrderCode);

                #endregion

                #region EmployeeLog

                int salerId = (int)order.Customer.SalerId;
                if (salerId > 0)
                {
                    EmployeeLogService els      = new EmployeeLogService();
                    EmployeeLog        order_el = els.SelectEmployeeLogByWhere(x => x.RecordCode == order.OrderCode).FirstOrDefault();
                    if (order_el != null)
                    {
                        els.DeleteEmployeeLog(order_el.Id);
                    }
                }

                #endregion

                if (!orderService.DeleteOrder(id) && kq)
                {
                    MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                loadOrderList();
            }
        }
Пример #12
0
        /// <summary>
        /// 檢查QTime 及設定QTime Action
        /// </summary>        
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            Session session = CurrentSession;
            ActivityCommonImpl utl = ActivityCommonImpl.Instance;
            IProductRepository prodRep = utl.prodRep; //RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
            IMBRepository mbRep = utl.mbRep;            
            IQTimeRepository qTimeRep = RepositoryFactory.GetInstance().GetRepository<IQTimeRepository, QTime>();
            ILineRepository lineRep = utl.lineRep;  //RepositoryFactory.GetInstance().GetRepository<ILineRepository, Line>();
            DateTime now=DateTime.MinValue;
           
            #region 檢查 Product ,QTime及LineEx 設置資料,若無,則不做
            string pdline = this.Line;
            IProduct prod =null;
            IMB mb =null;
            string SN = null;
            string modelName = null;
            string familyName = null;
            DateTime udt = DateTime.Now;
            string preStation = null;

            if (this.ProcessType == ProcessTypeEnum.Product)
            {
                prod = utl.IsNull<IProduct>(session,Session.SessionKeys.Product);
                modelName = prod.Model;
                SN = prod.ProductID;
                familyName = prod.Family;
                udt = prod.Status.Udt;
                preStation = prod.Status.StationId.Trim();
                if (string.IsNullOrEmpty(pdline))
                {
                    pdline = prod.Status.Line;
                    if (string.IsNullOrEmpty(pdline))
                    {
                        IList<ProductStatusExInfo> preStatusList = prodRep.GetProductPreStation(new List<string> { prod.ProId });
                        if (preStatusList.Count > 0)
                        {
                            pdline = preStatusList[0].PreLine;
                        }
                    }
                }
            }
            else
            {
                mb = utl.IsNull<IMB>(session, Session.SessionKeys.MB);
                modelName = mb.Model;
                SN = mb.Sn;
                familyName = mb.Family;
                udt = mb.MBStatus.Udt;
                preStation = mb.MBStatus.Station;

                if (string.IsNullOrEmpty(pdline))
                {
                    pdline = mb.MBStatus.Line;
                    if (string.IsNullOrEmpty(pdline))
                    {
                        IList<PCBStatusExInfo> preStatusList = mbRep.GetPCBPreStation(new List<string> { mb.Sn });
                        if (preStatusList.Count > 0)
                        {
                            pdline = preStatusList[0].PreLine;
                        }
                    }
                }
            }

         

            Line line = lineRep.Find(pdline);
            if (prod==null  || 
                line == null || 
                line.LineEx == null || 
                string.IsNullOrEmpty(line.LineEx.AliasLine))
            {
                //throw new FisException();
                return base.DoExecute(executionContext);
            }

            string aliasLine = line.LineEx.AliasLine;
            //QTime qTime = qTimeRep.Find(new string[] { aliasLine, this.Station, prod.ProId });

            QTime qTime = qTimeRep.GetPriorityQTime(aliasLine, this.Station, SN,modelName, familyName);
            if (qTime == null )
            {
                return base.DoExecute(executionContext);
            }
  
            #endregion
                      

            #region 檢查QTime.StopTime,計算是否紀錄停線,不做DB事務
            if (qTime != null && qTime.StopTime > 0)
            {
                 LineStationLastProcessTime processTime= qTimeRep.GetLastProcessTime(aliasLine, this.Station);
                 if (processTime != null)
                 {
                     now = processTime.Now;
                     if (processTime.SpeedTime >= qTime.StopTime)
                     {
                         LineStationStopPeriodLog periodLog = new LineStationStopPeriodLog
                         {
                             Line = aliasLine,
                             Station = this.Station,
                             StartTime = processTime.ProcessTime,
                             EndTime = now,
                             Editor = this.Editor
                         };
                         qTimeRep.AddLineStationStopPeriodLog(periodLog);
                     }
                 }
                 // 沒有最後一次Process Time 不考慮Check TimeOut
                 else
                 {
                     now = SqlHelper.GetDateTime();
                 }

                processTime = new LineStationLastProcessTime
                 {
                     Line = aliasLine,
                     Station = this.Station,
                     ProductID = SN,
                     ProcessTime = now,
                     Editor = this.Editor
                 };
                 qTimeRep.UpdateLineStationLastProcessTime(processTime);

                //刪除過時的停線紀錄
                 qTimeRep.RemoveStationStopPeriodLog(aliasLine, this.Station, this.RemainLogDay);
            }
           #endregion

           #region 檢查TimeOut ,計算是否QTime逾時並執行QTime Action
            IUnitOfWork uow = new UnitOfWork();
            bool isDoDefect = false;
            bool isDoHoldStation = false;
            string defectStation = this.Station;
            int timeOut = 0;
            //int stopTime = 0;
            bool isCheckTimeOutStation = true;
            bool isTimeOut = false;
            //string preStation = prod.Status.StationId.Trim();
            TestLog.TestLogStatus defectStatus = TestLog.TestLogStatus.Fail;
            //檢查TimeOut例外站點
            if (!string.IsNullOrEmpty(qTime.ExceptStation))
            {
                string[] exceptStations = qTime.ExceptStation.Split(Delimiter);
                isCheckTimeOutStation = !exceptStations.Contains(preStation);
            }

            if (qTime != null && qTime.TimeOut > 0 &&
                isCheckTimeOutStation)
            {
                if (now == DateTime.MinValue)
                {
                    now = SqlHelper.GetDateTime();
                }
                    //計算TimeOut
                    //IList<int> timeOutList = qTimeRep.CalLineStopTime(aliasLine, "69", prod.Status.Udt, now);
                    //stopTime = timeOutList[0];
                    //timeOut = (timeOutList[1] - timeOutList[0]) ;

                    IList<LineStopLogInfo> logs = qTimeRep.CalLineStopMillionSecond(aliasLine, this.Station, udt, now);
                    double stopMillionSecond = 0;
                    foreach( LineStopLogInfo item in logs)
                    {
                        stopMillionSecond = stopMillionSecond + (item.EndTime - item.StartTime).TotalMilliseconds;
                    }

                    timeOut = (int)(((now - udt).TotalMilliseconds - stopMillionSecond) / 1000); 

                    // 判別有沒有TimeOut 
                    if ((qTime.Category == QTimeCategoryEnum.Max && timeOut >= qTime.TimeOut) ||
                        (qTime.Category == QTimeCategoryEnum.Min && timeOut <= qTime.TimeOut))
                    {
                        isTimeOut = true;
                        if (!string.IsNullOrEmpty(qTime.DefectCode))
                        {
                            isDoDefect = true;
                        }
                        if (!string.IsNullOrEmpty(qTime.HoldStation))
                        {
                            defectStation = qTime.HoldStation;
                            defectStatus = (qTime.HoldStatus == QTimeStationStatusEnum.Fail ?
                                                     TestLog.TestLogStatus.Fail : TestLog.TestLogStatus.Pass);
                            isDoHoldStation = true;
                        }
                    }
                    
                    //執行QTime Action
                    if (isDoDefect || isDoHoldStation)
                    {
                       
                        if (this.ProcessType == ProcessTypeEnum.Product)
                        {
                            prod.UpdateStatus(new IMES.FisObject.FA.Product.ProductStatus()
                            {
                                Line = pdline,
                                ProId = SN,
                                TestFailCount = 0,
                                ReworkCode = string.Empty,
                                StationId = defectStation,
                                Status = (defectStatus == TestLog.TestLogStatus.Fail ?
                                                               StationStatus.Fail : StationStatus.Pass),
                                Editor = this.Editor,
                                Udt = now
                            });

                            IList<IMES.DataModel.TbProductStatus> stationList = prodRep.GetProductStatus(new List<string> { prod.ProId });
                            prodRep.UpdateProductPreStationDefered(uow, stationList);

                            #region write Productlog

                            ProductLog productLog = new ProductLog
                            {
                                Model = prod.Model,
                                Status = (defectStatus == TestLog.TestLogStatus.Fail ?
                                                               StationStatus.Fail : StationStatus.Pass),
                                Editor = this.Editor,
                                Line = pdline,
                                Station = defectStation,
                                Cdt = now
                            };

                            prod.AddLog(productLog);
                        }
                        else
                        {
                            MBStatus mbStatus= new MBStatus(SN, defectStation, (defectStatus == TestLog.TestLogStatus.Fail ?
                                                               MBStatusEnum.Fail : MBStatusEnum.Pass), this.Editor, pdline, now, now);
                            mb.MBStatus = mbStatus;

                            IList<TbProductStatus> preStatusList = mbRep.GetMBStatus(new List<string>() { SN });
                            mbRep.UpdatePCBPreStationDefered(uow,
                                                                                       preStatusList);
                            #region Write MBlog
                            var mbLog = new MBLog(
                                                0,
                                                mb.Sn,
                                                mb.Model,
                                                 defectStation,
                                                 (defectStatus == TestLog.TestLogStatus.Fail ?
                                                               0 : 1),
                                                pdline,
                                                this.Editor,
                                                now);

                            mb.AddLog(mbLog);
                           
                            #endregion
                        }

                        #endregion
                    }

                    //unpack Pizza part
                    if (this.ProcessType == ProcessTypeEnum.Product && 
                        isDoHoldStation &&
                        defectStation == UnPizzaDefectStation)
                    {                        
                        utl.UnPack.unPackPizzaPart(session, uow, this.Editor);
                        utl.UnPack.unPackPAKProductPart(session, uow, this.Editor);

                        prodRep.DeleteProductPartByProductIDAndStationDefered(uow, 
                                                                                                                 new List<string>() { SN },
                                                                                                                 UnpackPizzaStationList, 
                                                                                                                 this.Editor);
                    }

                    if (isDoDefect)
                    {
                        #region add test log
                        string actionName = qTime.Category.ToString() + QTIMEName;
                        string errorCode = string.Empty;
                        string descr = string.Format(DefectDescrFormat, preStation, this.Station, timeOut.ToString()); //"PreStation:"+preStation+ "~CurStation:"+this.Station +"~TimeOut:"+ timeOut.ToString();
                         
                        //TestLog testLog = new TestLog(0, prod.ProId, this.Line, "", defectStation, defectStatus, "", this.Editor, "PRD", DateTime.Now);
                        TestLog testLog = new TestLog(0, SN, pdline, string.Empty, defectStation, defectStatus, string.Empty,
                                                                            actionName, errorCode, descr, this.Editor, DefectType, now);
                        if (this.ProcessType == ProcessTypeEnum.Product)
                        {
                            prod.AddTestLog(testLog);
                            //add defect
                            TestLogDefect defectItem = new TestLogDefect(0, 0, qTime.DefectCode, this.Editor, now);
                            testLog.AddTestLogDefect(defectItem);
                        }
                        else
                        {
                            mb.AddTestLog(testLog);
                            TestLogDefect defectItem = new TestLogDefect(0, 0, qTime.DefectCode, this.Editor, now);
                            testLog.AddTestLogDefect(defectItem);
                        }
                        #endregion
                    } 
                
                     if (isDoDefect || isDoHoldStation)
                     {
                         if (this.ProcessType == ProcessTypeEnum.Product)
                         {
                             prodRep.Update(prod, uow);
                         }
                         else
                         {
                             mbRep.Update(mb, uow);
                         }
                        uow.Commit();
                        if (qTime.Category == QTimeCategoryEnum.Min)
                        {
                            int diffTime = (timeOut - qTime.TimeOut) / 60;
                            throw new FisException("CHK093", new string[] { diffTime.ToString() });
                        }
                        else
                        {
                            throw new FisException("QTM001", new string[] { SN, qTime.Category.ToString() + QTIMEName, timeOut.ToString() });
                        }
                     }
                    
                     
                     //Min QTime Warning message nothing to do
                     if (isTimeOut && qTime.Category == QTimeCategoryEnum.Min)
                     {
                         int diffTime = (timeOut - qTime.TimeOut) / 60;
                         throw new FisException("CHK093", new string[]{diffTime.ToString()});
                     }
                }  
            #endregion

            return base.DoExecute(executionContext);
        }
Пример #13
0
        public GeneralResponse EditProductLog(EditProductLogRequest request)
        {
            GeneralResponse response   = new GeneralResponse();
            ProductLog      productLog = new ProductLog();

            productLog = _productLogRepository.FindBy(request.ID);

            if (productLog != null)
            {
                try
                {
                    productLog.ModifiedDate     = PersianDateTime.Now;
                    productLog.ModifiedEmployee = _employeeRepository.FindBy(request.ModifiedEmployeeID);
                    if (request.Note != null)
                    {
                        productLog.Note = request.Note;
                    }
                    productLog.Closed = request.Closed;
                    if (request.InputSerialNumber != null)
                    {
                        productLog.InputSerialNumber = request.InputSerialNumber;
                    }
                    if (request.LogDate != null)
                    {
                        productLog.LogDate = request.LogDate;
                    }
                    if (request.ProductID != null)
                    {
                        productLog.Product = this._productRepository.FindBy(request.ProductID);
                    }
                    if (request.ProductSerialFrom != null)
                    {
                        productLog.ProductSerialFrom = request.ProductSerialFrom;
                    }
                    if (request.ProductSerialTo != null)
                    {
                        productLog.ProductSerialTo = request.ProductSerialTo;
                    }
                    if (request.PurchaseBillNumber != null)
                    {
                        productLog.PurchaseBillNumber = request.PurchaseBillNumber;
                    }
                    if (request.PurchaseDate != null)
                    {
                        productLog.PurchaseDate = request.PurchaseDate;
                    }
                    productLog.PurchaseUnitPrice = request.PurchaseUnitPrice;
                    if (request.SellerName != null)
                    {
                        productLog.SellerName = request.SellerName;
                    }

                    // بدست آوردن اختلاف تعداد
                    Product product = productLog.Product;
                    if (productLog.UnitsIO != request.UnitsIO)
                    {
                        product.UnitsInStock += request.UnitsIO - productLog.UnitsIO;
                        _productRepository.Save(product);
                    }

                    productLog.UnitsIO = request.UnitsIO;

                    #region RowVersion

                    if (productLog.RowVersion != request.RowVersion)
                    {
                        response.ErrorMessages.Add("EditConcurrencyKey");
                        return(response);
                    }
                    else
                    {
                        productLog.RowVersion += 1;
                    }

                    #endregion

                    #region Validation

                    if (productLog.GetBrokenRules().Count() > 0)
                    {
                        foreach (BusinessRule businessRule in productLog.GetBrokenRules())
                        {
                            response.ErrorMessages.Add(businessRule.Rule);
                        }

                        return(response);
                    }

                    #endregion

                    _productLogRepository.Save(productLog);
                    _uow.Commit();
                }
                catch (Exception ex)
                {
                    response.ErrorMessages.Add(ex.Message);
                }
            }
            else
            {
                response.ErrorMessages.Add("NoItemToEditKey");
            }
            return(response);
        }
Пример #14
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (this.validator1.Validate() && ValidateData())
            {
                DateTime systime = BaoHienRepository.GetBaoHienDBDataContext().GetSystemDate();
                int      userId  = 0;
                if (Global.CurrentUser != null)
                {
                    userId = Global.CurrentUser.Id;
                }
                else
                {
                    MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                if (entranceStock != null && isUpdating)//update
                {
                    #region Fix Update

                    string              msg = "";
                    int                 error = 0, amount_change = 0;
                    ProductLog          pl, newpl;
                    EntranceStockDetail esd;
                    // Check update old data
                    List <EntranceStockDetail> deleted_details = old_details.Where(x => !entranceStockDetails.Select(y => y.ProductId.ToString() + '_' +
                                                                                                                     y.AttributeId.ToString() + '_' + y.UnitId.ToString()).Contains(x.ProductId.ToString() + '_' +
                                                                                                                                                                                    x.AttributeId.ToString() + '_' + x.UnitId.ToString())).ToList();
                    foreach (EntranceStockDetail item in deleted_details)
                    {
                        pl = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                        if (pl.AfterNumber - item.NumberUnit < 0)
                        {
                            if (error == 0)
                            {
                                msg  += "Những sản phẩm sau đã bị XÓA nhưng không đảm bảo dữ liệu trong kho:\n";
                                error = 1;
                            }
                            msg += "- " + productLogService.GetNameOfProductLog(pl) + " : " + item.NumberUnit + "\n";
                        }
                    }

                    List <EntranceStockDetail> updated_details = old_details.Where(x => entranceStockDetails.Select(y => y.ProductId.ToString() + '_' +
                                                                                                                    y.AttributeId.ToString() + '_' + y.UnitId.ToString()).Contains(x.ProductId.ToString() + '_' +
                                                                                                                                                                                   x.AttributeId.ToString() + '_' + x.UnitId.ToString())).ToList();
                    foreach (EntranceStockDetail item in updated_details)
                    {
                        pl  = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                        esd = entranceStockDetails.Where(x => x.ProductId == item.ProductId && x.AttributeId == item.AttributeId &&
                                                         x.UnitId == item.UnitId).FirstOrDefault();
                        amount_change = Convert.ToInt32(esd.NumberUnit - item.NumberUnit);
                        if (amount_change < 0 && pl.AfterNumber + amount_change < 0) // Giam so luong nhap
                        {
                            if (error < 2)
                            {
                                msg  += "Những sản phẩm sau đã bị SỬA nhưng không đảm bảo dữ liệu trong kho:\n";
                                error = 2;
                            }
                            msg += "- " + productLogService.GetNameOfProductLog(pl) + " : " + amount_change.ToString() + "\n";
                        }
                    }

                    if (error > 0)
                    {
                        MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }

                    try
                    {
                        entranceStock.UserId      = userId;
                        entranceStock.Note        = txtNote.Text;
                        entranceStock.UpdatedDate = systime;

                        EntranceStockDetailService entranceStockDetailService = new EntranceStockDetailService();
                        foreach (EntranceStockDetail item in deleted_details)
                        {
                            pl    = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            newpl = new ProductLog()
                            {
                                ProductId    = item.ProductId,
                                AttributeId  = item.AttributeId,
                                UnitId       = item.UnitId,
                                BeforeNumber = pl.AfterNumber,
                                Amount       = item.NumberUnit,
                                AfterNumber  = pl.AfterNumber - item.NumberUnit,
                                RecordCode   = entranceStock.EntranceCode,
                                Status       = BHConstant.ACTIVE_STATUS,
                                Direction    = BHConstant.DIRECTION_OUT,
                                UpdatedDate  = systime
                            };
                            productLogService.AddProductLog(newpl);
                        }
                        foreach (EntranceStockDetail od in entranceStockDetails)
                        {
                            od.EntranceStockId = entranceStock.Id;
                            if (od.ProductId > 0 && od.AttributeId > 0 && od.UnitId > 0)
                            {
                                EntranceStockDetail tmp_ode = old_details.Where(x => x.ProductId == od.ProductId &&
                                                                                x.AttributeId == od.AttributeId && x.UnitId == od.UnitId && x.EntranceStockId == entranceStock.Id).FirstOrDefault();
                                if (tmp_ode != null)
                                {
                                    double amount = od.NumberUnit - tmp_ode.NumberUnit;
                                    entranceStockDetailService.UpdateEntranceStockDetail(od);
                                    //Save in Production Log
                                    if (amount != 0)
                                    {
                                        pl    = productLogService.GetProductLog(od.ProductId, od.AttributeId, od.UnitId);
                                        newpl = new ProductLog()
                                        {
                                            ProductId    = od.ProductId,
                                            AttributeId  = od.AttributeId,
                                            UnitId       = od.UnitId,
                                            BeforeNumber = pl.AfterNumber,
                                            Amount       = Math.Abs(amount),
                                            AfterNumber  = pl.AfterNumber + amount,
                                            RecordCode   = entranceStock.EntranceCode,
                                            Status       = BHConstant.ACTIVE_STATUS,
                                            Direction    = amount > 0 ? BHConstant.DIRECTION_IN : BHConstant.DIRECTION_OUT,
                                            UpdatedDate  = systime
                                        };
                                        productLogService.AddProductLog(newpl);
                                    }
                                }
                                else
                                {
                                    bool ret = (od.Id != null && od.Id > 0) ? entranceStockDetailService.UpdateEntranceStockDetail(od)
                                        : entranceStockDetailService.AddEntranceStockDetail(od);
                                    //Save in Production Log
                                    pl    = productLogService.GetProductLog(od.ProductId, od.AttributeId, od.UnitId);
                                    newpl = new ProductLog()
                                    {
                                        ProductId    = od.ProductId,
                                        AttributeId  = od.AttributeId,
                                        UnitId       = od.UnitId,
                                        BeforeNumber = pl.AfterNumber,
                                        Amount       = od.NumberUnit,
                                        AfterNumber  = pl.AfterNumber + od.NumberUnit,
                                        RecordCode   = entranceStock.EntranceCode,
                                        Status       = BHConstant.ACTIVE_STATUS,
                                        Direction    = BHConstant.DIRECTION_IN,
                                        UpdatedDate  = systime
                                    };
                                    productLogService.AddProductLog(newpl);
                                }
                            }
                        }

                        EntranceStockService entranceStockService = new EntranceStockService();
                        bool result = entranceStockService.UpdateEntranceStock(entranceStock);

                        if (result)
                        {
                            MessageBox.Show("Phiếu nhập kho đã được cập nhật thành công");
                        }
                        else
                        {
                            MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        this.Close();
                    }
                    catch { }
                    #endregion
                }
                else//add new
                {
                    #region New

                    SeedService ss = new SeedService();
                    entranceStock = new EntranceStock
                    {
                        EntranceCode = ss.AddSeedID(BHConstant.PREFIX_FOR_ENTRANCE),
                        UserId       = userId,
                        CreatedDate  = systime,
                        Note         = txtNote.Text
                    };
                    EntranceStockService entranceStockService = new EntranceStockService();
                    bool result     = entranceStockService.AddEntranceStock(entranceStock);
                    long newOrderId = BaoHienRepository.GetMaxId <EntranceStock>();
                    EntranceStockDetailService entranceStockDetailService = new EntranceStockDetailService();
                    foreach (EntranceStockDetail od in entranceStockDetails)
                    {
                        if (od.ProductId > 0 && od.AttributeId > 0 && od.UnitId > 0)
                        {
                            od.EntranceStockId = (int)newOrderId;
                            bool ret = entranceStockDetailService.AddEntranceStockDetail(od);
                            if (!ret)
                            {
                                MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                return;
                            }

                            //Save in Product Log
                            ProductLog pl    = productLogService.GetProductLog(od.ProductId, od.AttributeId, od.UnitId);
                            ProductLog newpl = new ProductLog()
                            {
                                ProductId    = od.ProductId,
                                AttributeId  = od.AttributeId,
                                UnitId       = od.UnitId,
                                BeforeNumber = pl.AfterNumber,
                                Amount       = od.NumberUnit,
                                AfterNumber  = pl.AfterNumber + od.NumberUnit,
                                RecordCode   = entranceStock.EntranceCode,
                                Status       = BHConstant.ACTIVE_STATUS,
                                Direction    = BHConstant.DIRECTION_IN,
                                UpdatedDate  = systime
                            };
                            productLogService.AddProductLog(newpl);
                        }
                    }
                    if (result)
                    {
                        MessageBox.Show("Phiếu nhập kho đã được tạo thành công");
                    }
                    else
                    {
                        MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    this.Close();

                    #endregion
                }
            }
        }
Пример #15
0
 public static ProductLogView ConvertToProductLogView(this ProductLog productLog)
 {
     return(Mapper.Map <ProductLog, ProductLogView>(productLog));
 }
Пример #16
0
        /// <summary>
        /// 檢查QTime 及設定QTime Action
        /// </summary>        
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            IProductRepository prodRep = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
            IQTimeRepository qTimeRep = RepositoryFactory.GetInstance().GetRepository<IQTimeRepository, QTime>();
            ILineRepository lineRep = RepositoryFactory.GetInstance().GetRepository<ILineRepository, Line>();
            DateTime now = DateTime.MinValue;

            #region 檢查 Product ,QTime及LineEx 設置資料,若無,則不做
            string pdline = this.Line;
            var prod = (Product)CurrentSession.GetValue(Session.SessionKeys.Product);

            if (string.IsNullOrEmpty(pdline))
            {
                pdline = prod.Status.Line;
                if (string.IsNullOrEmpty(pdline))
                {
                    IList<ProductStatusExInfo> preStatusList = prodRep.GetProductPreStation(new List<string> { prod.ProId });
                    if (preStatusList.Count > 0)
                    {
                        pdline = preStatusList[0].PreLine;
                    }
                }
            }

            Line line = lineRep.Find(pdline);
            if (prod == null ||
                line == null ||
                line.LineEx == null ||
                string.IsNullOrEmpty(line.LineEx.AliasLine))
            {
                //throw new FisException();
                return base.DoExecute(executionContext);
            }

            string aliasLine = line.LineEx.AliasLine;
            //QTime qTime = qTimeRep.Find(new string[] { aliasLine, this.Station, prod.ProId });

            QTime qTime = qTimeRep.GetPriorityQTime(aliasLine, this.Station, prod.ProId, prod.Model, prod.Family);
            if (qTime == null)
            {
                return base.DoExecute(executionContext);
            }

            #endregion


            #region 檢查QTime.StopTime,計算是否紀錄停線,不做DB事務
            if (qTime != null && qTime.StopTime > 0)
            {
                LineStationLastProcessTime processTime = qTimeRep.GetLastProcessTime(aliasLine, this.Station);
                if (processTime != null)
                {
                    now = processTime.Now;
                    if (processTime.SpeedTime >= qTime.StopTime)
                    {
                        LineStationStopPeriodLog periodLog = new LineStationStopPeriodLog
                        {
                            Line = aliasLine,
                            Station = this.Station,
                            StartTime = processTime.ProcessTime,
                            EndTime = now,
                            Editor = this.Editor
                        };
                        qTimeRep.AddLineStationStopPeriodLog(periodLog);
                    }
                }
                // 沒有最後一次Process Time 不考慮Check TimeOut
                else
                {
                    now = SqlHelper.GetDateTime();
                }

                processTime = new LineStationLastProcessTime
                {
                    Line = aliasLine,
                    Station = this.Station,
                    ProductID = prod.ProId,
                    ProcessTime = now,
                    Editor = this.Editor
                };
                qTimeRep.UpdateLineStationLastProcessTime(processTime);

                //刪除過時的停線紀錄
                qTimeRep.RemoveStationStopPeriodLog(aliasLine, this.Station, this.RemainLogDay);
            }
            #endregion

            #region 檢查TimeOut ,計算是否QTime逾時並執行QTime Action
            IUnitOfWork uow = new UnitOfWork();
            bool isDoDefect = false;
            bool isDoHoldStation = false;
            string defectStation = this.Station;
            int timeOut = 0;
            //int stopTime = 0;
            bool isCheckTimeOutStation = true;
            bool isTimeOut = false;
            string preStation = prod.Status.StationId.Trim();
            TestLog.TestLogStatus defectStatus = TestLog.TestLogStatus.Fail;
            //檢查TimeOut例外站點
            if (!string.IsNullOrEmpty(qTime.ExceptStation))
            {
                string[] exceptStations = qTime.ExceptStation.Split(new char[] { ',', ';', '~' });
                isCheckTimeOutStation = !exceptStations.Contains(preStation);
            }

            if (qTime != null && qTime.TimeOut > 0 &&
                isCheckTimeOutStation)
            {
                if (now == DateTime.MinValue)
                {
                    now = SqlHelper.GetDateTime();
                }
                //計算TimeOut
                //IList<int> timeOutList = qTimeRep.CalLineStopTime(aliasLine, "69", prod.Status.Udt, now);
                //stopTime = timeOutList[0];
                //timeOut = (timeOutList[1] - timeOutList[0]) ;

                IList<LineStopLogInfo> logs = qTimeRep.CalLineStopMillionSecond(aliasLine, this.Station, prod.Status.Udt, now);
                double stopMillionSecond = 0;
                foreach (LineStopLogInfo item in logs)
                {
                    stopMillionSecond = stopMillionSecond + (item.EndTime - item.StartTime).TotalMilliseconds;
                }

                timeOut = (int)(((now - prod.Status.Udt).TotalMilliseconds - stopMillionSecond) / 1000);

                // 判別有沒有TimeOut 
                if ((qTime.Category == QTimeCategoryEnum.Max && timeOut >= qTime.TimeOut) ||
                    (qTime.Category == QTimeCategoryEnum.Min && timeOut <= qTime.TimeOut))
                {
                    isTimeOut = true;
                    if (!string.IsNullOrEmpty(qTime.DefectCode))
                    {
                        isDoDefect = true;
                    }
                    if (!string.IsNullOrEmpty(qTime.HoldStation))
                    {
                        defectStation = qTime.HoldStation;
                        defectStatus = (qTime.HoldStatus == QTimeStationStatusEnum.Fail ?
                                                 TestLog.TestLogStatus.Fail : TestLog.TestLogStatus.Pass);
                        isDoHoldStation = true;
                    }
                }

                //執行QTime Action
                if (isDoDefect || isDoHoldStation)
                {
                    #region record previous product Status
                    //System.Data.DataTable preStatus = CreateDataTable.CreateProductStatusTb();
                    //preStatus.Rows.Add(prod.ProId,
                    //                                   prod.Status.StationId,
                    //                                   prod.Status.Status == StationStatus.Pass ? 1 : 0,
                    //                                   prod.Status.ReworkCode,
                    //                                   prod.Status.Line,
                    //                                   prod.Status.TestFailCount,
                    //                                   prod.Status.Editor,                            
                    //                                   prod.Status.Udt
                    //                                   );



                    //System.Data.DataTable curStatus = CreateDataTable.CreateProductStatusTb();
                    prod.UpdateStatus(new IMES.FisObject.FA.Product.ProductStatus()
                    {
                        Line = pdline,
                        ProId = prod.ProId,
                        TestFailCount = 0,
                        ReworkCode = "",
                        StationId = defectStation,
                        Status = (defectStatus == TestLog.TestLogStatus.Fail ?
                                                       StationStatus.Fail : StationStatus.Pass),
                        Editor = this.Editor,
                        Udt = now
                    });

                    //prod.Status.Line = pdline;
                    //prod.Status.StationId = defectStation;
                    //prod.Status.Status = (defectStatus == TestLog.TestLogStatus.Fail ?
                    //                                   StationStatus.Fail : StationStatus.Pass);
                    //prod.Status.Editor = this.Editor;
                    //prod.Status.Udt = now;

                    //curStatus.Rows.Add(prod.ProId,
                    //                                   defectStation,
                    //                                  (defectStatus == TestLog.TestLogStatus.Fail ?
                    //                                   0 : 1),
                    //                                   prod.Status.ReworkCode,
                    //                                   this.Line,
                    //                                   prod.Status.TestFailCount,
                    //                                   this.Editor,
                    //                                   prod.Status.Udt
                    //                                   );

                    //SqlParameter para1 = new SqlParameter("PreStatus", System.Data.SqlDbType.Structured);
                    //para1.Direction = System.Data.ParameterDirection.Input;
                    //para1.Value = preStatus;

                    //SqlParameter para2 = new SqlParameter("Status", System.Data.SqlDbType.Structured);
                    //para2.Direction = System.Data.ParameterDirection.Input;
                    //para2.Value = curStatus;

                    //prodRep.ExecSpForNonQueryDefered(uow,
                    //                                                                 IMES.Infrastructure.Repository._Schema.SqlHelper.ConnectionString_FA,
                    //                                                                 "IMES_UpdateProductStatus",
                    //                                                                 para1,
                    //                                                                 para2);

                    IList<IMES.DataModel.TbProductStatus> stationList = prodRep.GetProductStatus(new List<string> { prod.ProId });
                    prodRep.UpdateProductPreStationDefered(uow, stationList);

                    #endregion

                    #region write Productlog

                    ProductLog productLog = new ProductLog
                    {
                        Model = prod.Model,
                        Status = (defectStatus == TestLog.TestLogStatus.Fail ?
                                                       StationStatus.Fail : StationStatus.Pass),
                        Editor = this.Editor,
                        Line = pdline,
                        Station = defectStation,
                        Cdt = now
                    };

                    prod.AddLog(productLog);

                    #endregion
                }

                //unpack Pizza part
                if (isDoHoldStation && defectStation == "UnPizza")
                {
                    ActivityCommonImpl utl = ActivityCommonImpl.Instance;
                    utl.UnPack.unPackPizzaPart(CurrentSession, uow, this.Editor);
                    utl.UnPack.unPackPAKProductPart(CurrentSession, uow, this.Editor);

                    prodRep.DeleteProductPartByProductIDAndStationDefered(uow,
                                                                                                             new List<string>() { prod.ProId },
                                                                                                             new List<string>() { "68", "8C", "PK01", "PK02", "PK03", "PK04", "PK05", "PKOK" },
                                                                                                             this.Editor);
                }

                if (isDoDefect)
                {
                    #region add test log
                    string actionName = qTime.Category.ToString() + "QTime";
                    string errorCode = "";
                    string descr = "PreStation:" + preStation + "~CurStation:" + this.Station + "~TimeOut:" + timeOut.ToString();

                    //TestLog testLog = new TestLog(0, prod.ProId, this.Line, "", defectStation, defectStatus, "", this.Editor, "PRD", DateTime.Now);
                    TestLog testLog = new TestLog(0, prod.ProId, pdline, "", defectStation, defectStatus, "",
                                                                        actionName, errorCode, descr, this.Editor, "PRD", now);

                    prod.AddTestLog(testLog);
                    //add defect
                    TestLogDefect defectItem = new TestLogDefect(0, 0, qTime.DefectCode, this.Editor, now);
                    testLog.AddTestLogDefect(defectItem);
                    #endregion
                }

                if (isDoDefect || isDoHoldStation)
                {
                    prodRep.Update(prod, uow);
                    uow.Commit();
                    if (qTime.Category == QTimeCategoryEnum.Min)
                    {
                        int diffTime = (timeOut - qTime.TimeOut) / 60;
                        throw new FisException("CHK093", new string[] { diffTime.ToString() });
                    }
                    else
                    {
                        throw new FisException("QTM001", new string[] { prod.ProId, qTime.Category.ToString() + "QTime", timeOut.ToString() });
                    }
                }


                //Min QTime Warning message nothing to do
                if (isTimeOut && qTime.Category == QTimeCategoryEnum.Min)
                {
                    int diffTime = (timeOut - qTime.TimeOut) / 60;
                    throw new FisException("CHK093", new string[] { diffTime.ToString() });
                }
            }
            #endregion

            return base.DoExecute(executionContext);
        }
Пример #17
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns></returns>
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            var prodRep = RepositoryFactory.GetInstance().GetRepository<IProductRepository>();
            Session session = CurrentSession;
            IProduct product = (IProduct)session.GetValue(Session.SessionKeys.Product);
            string returnStation = product.GetAttributeValue(this.AttrName);

            if (!string.IsNullOrEmpty(returnStation))
            {
                 IMES.FisObject.FA.Product.ProductStatus preStatus = product.Status;
              
                IList<IMES.DataModel.TbProductStatus> preStationList = new List<TbProductStatus>();
                preStationList.Add(new TbProductStatus
                {
                    ProductID = preStatus.ProId,
                    Line = preStatus.Line,
                    ReworkCode = preStatus.ReworkCode,
                    Station = preStatus.StationId,
                    Status = (int)preStatus.Status,
                    Editor = preStatus.Editor,
                    TestFailCount = preStatus.TestFailCount,
                    Udt=DateTime.Now
                });
                IMES.FisObject.FA.Product.ProductStatus curStatus = new IMES.FisObject.FA.Product.ProductStatus()
                {
                    ProId = preStatus.ProId,
                    ReworkCode = preStatus.ReworkCode,
                    TestFailCount = preStatus.TestFailCount,
                    Editor = this.Editor,
                    Status = IMES.FisObject.Common.Station.StationStatus.Pass,
                    StationId = returnStation,
                    Line = this.Line,
                    Cdt = DateTime.Now,
                    Udt = DateTime.Now
                };
                product.UpdateStatus(curStatus);

                var productLog = new ProductLog
                {
                    Model = product.Model,
                    Status = IMES.FisObject.Common.Station.StationStatus.Pass,
                    Editor = this.Editor,
                    Line = this.Line,
                    Station = returnStation,
                    Cdt = DateTime.Now
                };

                product.AddLog(productLog);
                prodRep.Update(product, session.UnitOfWork);

                prodRep.UpdateProductPreStationDefered(CurrentSession.UnitOfWork, preStationList);            
                
            }
          
            
            return base.DoExecute(executionContext);
        }
Пример #18
0
        /// <summary>
        /// 记录Product过站记录
        /// </summary>
        /// <param name="log">Product过站记录</param>
        public void AddLog(ProductLog log)
        {
            if (log == null)
                return;

            lock (_syncObj_productLogs)
            {
                if (_productLogs == null)
                {
                    _productLogs = new List<ProductLog>();
                }

                //object naught = ProductLogs;
                if (_productLogs.Contains(log))
                    return;

                log.Tracker = _tracker.Merge(log.Tracker);
                _productLogs.Add(log);
                //ProductLogs.Add(log);
                _tracker.MarkAsAdded(log);
                _tracker.MarkAsModified(this);

                LoggingInfoFormat("Tracker Content: {0}", _tracker.ToString());
            }
        }
Пример #19
0
        public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.SetData("DataDirectory", Path.GetFullPath("..\\..\\..\\PHP.Sales.Web\\App_Data"));
            using (var ctx = new SalesDbContext())
            {
                ctx.Database.Delete();
                ctx.Database.CreateIfNotExists();

                //CREATE YOUR OBJECTS

                //CREATE THE PRODUCTS
                List <Product> prods = new List <Product>(new Product[] {
                    new Product()
                    {
                        Name  = "Panodol",
                        Price = 12.32m,
                        QTY   = 30
                    },
                    new Product()
                    {
                        Name  = "Nurofen",
                        Price = 6.32m,
                        QTY   = 40
                    },
                    new Product()
                    {
                        Name  = "Anti-Fungal",
                        Price = 7.29m,
                        QTY   = 10
                    },
                    new Product()
                    {
                        Name  = "Antibiotic",
                        Price = 8.99m,
                        QTY   = 5
                    },
                    new Product()
                    {
                        Name  = "Antihistermine",
                        Price = 18.02m,
                        QTY   = 10
                    },
                    new Product()
                    {
                        Name  = "Sunscreen",
                        Price = 3372.5m,
                        QTY   = 1000
                    },
                    new Product()
                    {
                        Name  = "Multivitamin 90",
                        Price = 112400.00m,
                        QTY   = 7500
                    },
                    new Product()
                    {
                        Name  = "Vitamin D",
                        QTY   = 1000.00m,
                        Price = 8990.00m,
                    },
                    new Product()
                    {
                        Name  = "HS Pain Killer",
                        QTY   = 10m,
                        Price = 8.99m,
                    },
                    new Product()
                    {
                        Name  = "Baby Paracetemol",
                        QTY   = 5.00m,
                        Price = 12.59m,
                    },
                    new Product()
                    {
                        Name  = "Cold and Flu 24",
                        QTY   = 4.00m,
                        Price = 7.29m,
                    },
                });

                foreach (Product p in prods)
                {
                    p.Update();
                    ProductLog.GenerateProductLog(ctx, p, p.QTY);
                }
                ctx.Products.AddRange(prods);

                //CREATE THE TRANSACTIONS
                //First Transaction and Sale
                var tran1 = new Transaction()
                {
                    PayMethod = PaymentType.VISA,
                    SaleTime  = DateTime.Now
                };

                var sale11 = new Sale()
                {
                    Product = prods[0],
                    QTY     = 4.00m,
                    Price   = 12.32m,
                    GST     = true,
                    Void    = false,
                };

                //Second Transaction and Sale
                var tran2 = new Transaction()
                {
                    PayMethod = PaymentType.CASH,
                    SaleTime  = DateTime.Now,
                };

                var sale21 = new Sale()
                {
                    Product = prods[1],
                    QTY     = 2.00m,
                    Price   = 6.32m,
                    GST     = true,
                    Void    = false,
                };

                var sale22 = new Sale()
                {
                    Product = prods[0],
                    QTY     = 3.00m,
                    Price   = 9.24m,
                    GST     = true,
                    Void    = false,
                };

                //Third Transaction and Sale
                var tran3 = new Transaction()
                {
                    PayMethod = PaymentType.MASTERCARD,
                    SaleTime  = DateTime.Now,
                };

                var sale31 = new Sale()
                {
                    Product = prods[2],
                    QTY     = 1.00m,
                    Price   = 7.29m,
                    GST     = true,
                    Void    = false,
                };

                var sale32 = new Sale()
                {
                    Product = prods[3],
                    QTY     = 1.00m,
                    Price   = 8.99m,
                    GST     = false,
                    Void    = false,
                };

                var sale33 = new Sale()
                {
                    Product = prods[4],
                    QTY     = 2.00m,
                    Price   = 18.02m,
                    GST     = true,
                    Void    = false,
                };

                //Fourth Transaction and Sale (Large Quantities)
                var tran4 = new Transaction()
                {
                    PayMethod = PaymentType.CASH,
                    SaleTime  = DateTime.Now,
                };

                var sale41 = new Sale()
                {
                    Product = prods[5],
                    QTY     = 250.00m,
                    Price   = 3372.5m,
                    GST     = true,
                    Void    = false,
                };

                var sale42 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 5000.00m,
                    Price   = 112400.00m,
                    GST     = true,
                    Void    = false,
                };

                var sale43 = new Sale()
                {
                    Product = prods[7],
                    QTY     = 1000.00m,
                    Price   = 8990.00m,
                    GST     = true,
                    Void    = false,
                };

                //Fifth Transaction and Sale (One of Everything)
                var tran5 = new Transaction()
                {
                    PayMethod = PaymentType.CASH,
                    SaleTime  = DateTime.Now,
                };

                var sale51 = new Sale()
                {
                    Product = prods[0],
                    QTY     = 1.00m,
                    Price   = 3.08m,
                    GST     = true,
                    Void    = false,
                };

                var sale52 = new Sale()
                {
                    Product = prods[1],
                    QTY     = 1.00m,
                    Price   = 3.16m,
                    GST     = true,
                    Void    = false,
                };

                var sale53 = new Sale()
                {
                    Product = prods[2],
                    QTY     = 1.00m,
                    Price   = 9.02m,
                    GST     = true,
                    Void    = false,
                };

                var sale54 = new Sale()
                {
                    Product = prods[5],
                    QTY     = 1.00m,
                    Price   = 13.49m,
                    GST     = true,
                    Void    = false,
                };

                var sale55 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 1.00m,
                    Price   = 22.48m,
                    GST     = true,
                    Void    = false,
                };

                var sale56 = new Sale()
                {
                    Product = prods[7],
                    QTY     = 10.00m,
                    Price   = 8.99m,
                    GST     = true,
                    Void    = false,
                };

                var sale57 = new Sale()
                {
                    Product = prods[4],
                    QTY     = 1.00m,
                    Price   = 8.99m,
                    GST     = false,
                    Void    = false,
                };

                var sale58 = new Sale()
                {
                    Product = prods[8],
                    QTY     = 1.00m,
                    Price   = 8.99m,
                    GST     = false,
                    Void    = false,
                };

                var sale59 = new Sale()
                {
                    Product = prods[9],
                    QTY     = 1.00m,
                    Price   = 12.59m,
                    GST     = true,
                    Void    = false,
                };

                var sale510 = new Sale()
                {
                    Product = prods[2],
                    QTY     = 1.00m,
                    Price   = 7.29m,
                    GST     = true,
                    Void    = false,
                };

                var sale511 = new Sale()
                {
                    Product = prods[10],
                    QTY     = 1.00m,
                    Price   = 7.29m,
                    GST     = true,
                    Void    = false,
                };

                //Sixth Sale and Trnasaction
                var tran6 = new Transaction()
                {
                    PayMethod = PaymentType.VISA,
                    SaleTime  = DateTime.Now,
                };

                var sale61 = new Sale()
                {
                    Product = prods[10],
                    QTY     = 1.00m,
                    Price   = 7.29m,
                    GST     = true,
                    Void    = false,
                };

                var sale62 = new Sale()
                {
                    Product = prods[8],
                    QTY     = 1.00m,
                    Price   = 8.99m,
                    GST     = false,
                    Void    = false,
                };

                var sale63 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 1.00m,
                    Price   = 22.48m,
                    GST     = true,
                    Void    = false,
                };

                //Seventh Sale and Transaction (Same product sold multiple times)
                var tran7 = new Transaction()
                {
                    PayMethod = PaymentType.MASTERCARD,
                    SaleTime  = DateTime.Now,
                };

                var sale71 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 10.00m,
                    Price   = 224.80m,
                    GST     = true,
                    Void    = false,
                };

                var sale72 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 1.00m,
                    Price   = 22.48m,
                    GST     = true,
                    Void    = false,
                };

                var sale73 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 1.00m,
                    Price   = 22.48m,
                    GST     = true,
                    Void    = false,
                };

                var sale74 = new Sale()
                {
                    Product = prods[10],
                    QTY     = 1.00m,
                    Price   = 7.29m,
                    GST     = true,
                    Void    = false,
                };

                var sale75 = new Sale()
                {
                    Product = prods[6],
                    QTY     = 1.00m,
                    Price   = 22.48m,
                    GST     = true,
                    Void    = false,
                };

                //Update Sale 7
                sale71.Update();
                sale72.Update();
                sale73.Update();
                sale74.Update();
                sale75.Update();

                tran7.Sales.Add(sale71);
                tran7.Sales.Add(sale72);
                tran7.Sales.Add(sale73);
                tran7.Sales.Add(sale74);
                tran7.Sales.Add(sale75);

                foreach (Sale s in tran7.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran7.Update();

                ctx.Transactions.Add(tran7);

                //Update Sale 6
                sale61.Update();
                sale62.Update();
                sale63.Update();

                tran6.Sales.Add(sale61);
                tran6.Sales.Add(sale62);
                tran6.Sales.Add(sale63);

                foreach (Sale s in tran6.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran6.Update();

                ctx.Transactions.Add(tran6);

                //Update Sale 5
                sale51.Update();
                sale52.Update();
                sale53.Update();
                sale54.Update();
                sale55.Update();
                sale56.Update();
                sale57.Update();
                sale58.Update();
                sale59.Update();
                sale510.Update();
                sale511.Update();

                tran5.Sales.Add(sale51);
                tran5.Sales.Add(sale52);
                tran5.Sales.Add(sale53);
                tran5.Sales.Add(sale54);
                tran5.Sales.Add(sale55);
                tran5.Sales.Add(sale56);
                tran5.Sales.Add(sale57);
                tran5.Sales.Add(sale58);
                tran5.Sales.Add(sale59);
                tran5.Sales.Add(sale510);
                tran5.Sales.Add(sale511);

                foreach (Sale s in tran5.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran5.Update();

                ctx.Transactions.Add(tran5);

                //Update Sale 4
                sale41.Update();
                sale42.Update();
                sale43.Update();

                tran4.Sales.Add(sale41);
                tran4.Sales.Add(sale42);
                tran4.Sales.Add(sale43);

                foreach (Sale s in tran4.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran4.Update();

                ctx.Transactions.Add(tran4);

                //Update Sale 3
                sale31.Update();
                sale32.Update();
                sale33.Update();

                tran3.Sales.Add(sale31);
                tran3.Sales.Add(sale32);
                tran3.Sales.Add(sale33);

                foreach (Sale s in tran3.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran3.Update();

                ctx.Transactions.Add(tran3);

                //Update Sale 2
                sale21.Update();
                sale22.Update();

                tran2.Sales.Add(sale21);
                tran2.Sales.Add(sale22);

                foreach (Sale s in tran2.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran2.Update();

                ctx.Transactions.Add(tran2);

                //Update Sale 1
                sale11.Update();

                tran1.Sales.Add(sale11);

                foreach (Sale s in tran1.Sales)
                {
                    ProductLog.GenerateSaleLog(ctx, s.Product, s.QTY);
                }

                tran1.Update();

                ctx.Transactions.Add(tran1);

                //ADD REPORT
                List <Report> reports = new List <Report>()
                {
                    new Report()
                    {
                        Name    = "Test Report",
                        Product = prods[0],
                        Start   = DateTime.Now,
                        End     = DateTime.Now.AddDays(1)
                    },
                    new Report()
                    {
                        Name    = "Test Weekly Report",
                        Product = prods[2],
                        Start   = DateTime.Now.AddDays(-7),
                        End     = DateTime.Now.AddDays(-1)
                    },
                    new Report()
                    {
                        Name    = "Test Monthly Report",
                        Product = prods[2],
                        Start   = DateTime.Now.AddMonths(-1),
                        End     = DateTime.Now.AddDays(-1)
                    }
                };

                foreach (var r in reports)
                {
                    r.Update();
                }

                ctx.Reports.AddRange(reports);

                //ADD STOCK SNAPSHOT

                List <Stock> snapshots = new List <Stock>()
                {
                    /*new Stock()
                     * {
                     *  Product = prods[0],
                     *  TimeStamp = DateTime.Now.Date,
                     *  QTY = 30
                     * },
                     * new Stock()
                     * {
                     *  Product = prods[0],
                     *  TimeStamp = DateTime.Now.AddDays(-1).Date,
                     *  QTY = 37
                     * },
                     * new Stock()
                     * {
                     *  Product = prods[1],
                     *  TimeStamp = DateTime.Now.Date,
                     *  QTY = 38
                     * },
                     * new Stock()
                     * {
                     *  Product = prods[1],
                     *  TimeStamp = DateTime.Now.AddDays(-1).Date,
                     *  QTY = 42
                     * },*/
                };

                DateTime check = DateTime.Now.AddDays(-40).Date;
                Random   rand  = new Random();

                do
                {
                    foreach (var p in prods)
                    {
                        Stock stock = new Stock()
                        {
                            Product   = p,
                            TimeStamp = check.Date,
                            QTY       = (decimal)rand.NextDouble() * rand.Next(150)
                        };
                        stock.Update();
                        snapshots.Add(stock);

                        int i = rand.Next(6);
                        for (var j = 0; j < i; j++)
                        {
                            Transaction t = new Transaction()
                            {
                                PayMethod = (PaymentType)rand.Next(3),
                            };

                            int k = rand.Next(10);
                            for (var l = 0; l < k; l++)
                            {
                                Sale s = new Sale()
                                {
                                    Product = prods[rand.Next(prods.Count)],
                                    QTY     = (decimal)rand.NextDouble() * rand.Next(10),
                                    GST     = (rand.NextDouble() > 0.5) ? true : false,
                                    Void    = false
                                };
                                s.Price = s.Product.Price;
                                s.Update();

                                Log log = new Log()
                                {
                                    ProductID = s.Product.ID,
                                    QTY       = -s.QTY,
                                    TimeStamp = t.SaleTime
                                };
                                log.Update();
                                ctx.Logs.Add(log);

                                t.Sales.Add(s);
                            }
                            t.Update();
                            t.SaleTime = check.AddMinutes(rand.Next(60 * 24));
                            ctx.Transactions.Add(t);
                        }
                    }
                    check = check.AddDays(+1);
                } while (check.Date <= DateTime.Now.Date);

                ctx.StockSnapshot.AddRange(snapshots);


                // Save Transaction Database
                ctx.SaveChanges();
            }
        }
Пример #20
0
        private void dgwRequestList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (sender is DataGridView)
            {
                DataGridViewCell cell = ((DataGridView)sender).CurrentCell;
                if (cell.ColumnIndex == ((DataGridView)sender).ColumnCount - 1)
                {
                    DialogResult result = MessageBox.Show("Bạn có muốn xóa phiếu sản xuât này?",
                                                          "Xoá phiếu sản xuât",
                                                          MessageBoxButtons.YesNo,
                                                          MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        DataGridViewRow currentRow = dgwRequestList.Rows[e.RowIndex];

                        ProductionRequestService       productionRequestService       = new ProductionRequestService();
                        ProductionRequestDetailService productionRequestDetailService = new ProductionRequestDetailService();
                        int id = ObjectHelper.GetValueFromAnonymousType <int>(currentRow.DataBoundItem, "Id");
                        ProductionRequest pr = productionRequestService.GetProductionRequest(id);
                        List <ProductionRequestDetail> productionRequestDetails = productionRequestDetailService.GetProductionRequestDetails().Where(p => p.ProductionRequestId == id).ToList();
                        bool     ret     = false;
                        DateTime systime = BaoHienRepository.GetBaoHienDBDataContext().GetSystemDate();

                        ProductLogService productLogService = new ProductLogService();
                        string            msg = "";
                        int        error = 0, amount = 0;
                        ProductLog pl, newpl;
                        foreach (ProductionRequestDetail item in productionRequestDetails)
                        {
                            pl     = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            amount = (item.Direction == BHConstant.DIRECTION_OUT) ? -item.NumberUnit : item.NumberUnit;
                            if (pl.AfterNumber - amount < 0)
                            {
                                if (error == 0)
                                {
                                    msg  += "Những sản phẩm sau đã bị XÓA nhưng không đảm bảo dữ liệu trong kho:\n";
                                    error = 1;
                                }
                                msg += "- " + productLogService.GetNameOfProductLog(pl) + " : " + item.NumberUnit + "\n";
                            }
                        }
                        if (error > 0)
                        {
                            MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        foreach (ProductionRequestDetail item in productionRequestDetails)
                        {
                            pl     = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            amount = (item.Direction == BHConstant.DIRECTION_OUT) ? -item.NumberUnit : item.NumberUnit;
                            newpl  = new ProductLog()
                            {
                                ProductId    = item.ProductId,
                                AttributeId  = item.AttributeId,
                                UnitId       = item.UnitId,
                                BeforeNumber = pl.AfterNumber,
                                Amount       = item.NumberUnit,
                                AfterNumber  = pl.AfterNumber - amount,
                                RecordCode   = pr.ReqCode,
                                Status       = BHConstant.DEACTIVE_STATUS,
                                Direction    = !item.Direction,
                                UpdatedDate  = systime
                            };
                            productLogService.AddProductLog(newpl);
                        }
                        productLogService.DeactiveProductLog(pr.ReqCode);
                        if (!productionRequestService.DeleteProductionRequest(id))
                        {
                            MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        loadProductionRequestList();
                    }
                }
            }
        }
Пример #21
0
        public GeneralResponse AddProductLog(AddProductLogRequest request, Guid CreateEmployeeID)
        {
            GeneralResponse response = new GeneralResponse();

            try
            {
                ProductLog productLog = new ProductLog();


                //if (request.IO == -1)
                //    productLog.UnitsIO = -request.DisplayUnitsIO;
                //else
                //    productLog.UnitsIO = request.DisplayUnitsIO;


                productLog.ID = Guid.NewGuid();

                productLog.CreateDate        = PersianDateTime.Now;
                productLog.CreateEmployee    = _employeeRepository.FindBy(CreateEmployeeID);
                productLog.Note              = request.Note;
                productLog.Closed            = request.Closed;
                productLog.InputSerialNumber = GetNewSerialNumber;
                productLog.LogDate           = request.LogDate;
                productLog.Product           = this._productRepository.FindBy(request.ProductID);

                productLog.ProductSerialFrom  = request.ProductSerialFrom;
                productLog.ProductSerialTo    = request.ProductSerialTo;
                productLog.PurchaseBillNumber = request.PurchaseBillNumber;
                productLog.PurchaseDate       = request.PurchaseDate;
                productLog.PurchaseUnitPrice  = request.PurchaseUnitPrice;
                productLog.SellerName         = request.SellerName;

                productLog.RowVersion = 1;


                #region Validation

                if (productLog.GetBrokenRules().Count() > 0)
                {
                    foreach (BusinessRule businessRule in productLog.GetBrokenRules())
                    {
                        response.ErrorMessages.Add(businessRule.Rule);
                    }

                    return(response);
                }

                #endregion

                Product product = productLog.Product;


                if (request.IO == -1)
                {
                    if (productLog.Product.UnitsInStock < request.DisplayUnitsIO)
                    {
                        response.ErrorMessages.Add("موجودی انبار کافی نیست");
                        return(response);
                    }
                    else
                    {
                        product.UnitsInStock -= request.DisplayUnitsIO;
                        productLog.UnitsIO    = -request.DisplayUnitsIO;
                    }
                }
                else
                {
                    product.UnitsInStock += request.DisplayUnitsIO;
                    productLog.UnitsIO    = request.DisplayUnitsIO;
                }

                //product.UnitsInStock += productLog.UnitsIO;
                _productRepository.Save(product);



                _productLogRepository.Add(productLog);
                _uow.Commit();
            }
            catch (Exception ex)
            {
                response.ErrorMessages.Add(ex.Message);
                if (ex.InnerException != null)
                {
                    response.ErrorMessages.Add(ex.InnerException.Message);
                }
            }

            return(response);
        }
Пример #22
0
        public async Task <string> UpdateProducts([FromBody] ProductLog logData)
        {
            try
            {
                var fiProducts = logData.ProductData.OrderByDescending(c => c.ProductId).Take(20);
                var host       = await _hostCache.GetHostByIdAsync(logData.HostId).ConfigureAwait(false);

                if (host == null || host.Id == 0)
                {
                    return(CommonStrings.NoHost);
                }
                #region SecurityCheck
                if (_configurations.SecurityCheck)
                {
                    var origin = Request.Headers[CommonStrings.Origin].ToString();
                    if (!string.IsNullOrEmpty(origin))
                    {
                        var aut = new Uri(origin).Host;
                        aut = aut.ToLower();
                        var topdomain = string.Empty;
                        if (aut.IndexOf(CommonStrings.Dot) == aut.LastIndexOf(CommonStrings.Dot))
                        {
                            topdomain = aut;
                        }
                        else
                        {
                            topdomain = aut.Substring(aut.IndexOf(CommonStrings.Dot) + 1);
                        }
                        if (host.Host != topdomain)
                        {
                            return(CommonStrings.NoHostAccess);
                        }
                    }
                }
                #endregion
                if (logData != null && (await _crowlerCache.IsCrowler(logData.UserId)))
                {
                    return(string.Empty);
                }
                List <Task> tasks = new List <Task>
                {
                    _totalVisitUpdater.UpdateTotalVisit(logData.HostId)
                };
                await _hostScriptChecker.UpdateProductValidation(logData.HostId);

                var categoriesforlog = logData.ProductData.Where(c => !string.IsNullOrEmpty(c.Category)).GroupBy(c => c.Category).Select(v => new KeyValuePair <string, int>(v.Key, v.Count()));
                foreach (var category in categoriesforlog)
                {
                    tasks.Add(_categoryLogger.LogCategory(host.Id, category.Key, category.Value));
                }
                foreach (var item in fiProducts)
                {
                    var updateedProduct = new HostProduct()
                    {
                        Description  = item.Description,
                        ImageAddress = item.ImageAddress,
                        IsAvailable  = item.Available,
                        Price        = item.Price,
                        Url          = item.PageAddress,
                        Id           = item.ProductId,
                        ProductName  = item.Name,
                        CategoryName = item.Category,
                        UpdateDate   = DateTime.Now
                    };
                    tasks.Add(_productCache.UpdateProduct(logData.HostId, updateedProduct));
                }

                #region Log Into Kafka
                foreach (var item in logData.ProductData)
                {
                    await _kafkaLogger.SendMessage(new DruidData()
                    {
                        CategoryName = item.Category,
                        Date         = DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:sszzz"),
                        HostName     = host.Host,
                        ImageAddress = item.ImageAddress,
                        Price        = item.Price,
                        ProductName  = item.Name,
                        PageAddress  = item.PageAddress,
                        ProductId    = item.ProductId,
                        StatType     = StatTypes.ProductView,
                        UserId       = logData.UserId.ToString(),
                        HostId       = logData.HostId.ToString(),
                    });
                }
                #endregion

                await Task.WhenAll(tasks).ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                await _errorLogger.LogError("Operation:ProductUpdate =>" + ex.Message);
            }
            return(string.Empty);
        }
Пример #23
0
        public GeneralResponse AddProductLogToStore(AddProductLogStoreRequest request, Guid CreateEmployeeID)
        {
            GeneralResponse response = new GeneralResponse();

            ProductLog productLog = new ProductLog();


            productLog.ID = Guid.NewGuid();

            productLog.CreateDate        = PersianDateTime.Now;
            productLog.CreateEmployee    = _employeeRepository.FindBy(CreateEmployeeID);
            productLog.Note              = request.Note;
            productLog.Closed            = request.Closed;
            productLog.InputSerialNumber = GetNewSerialNumber;
            productLog.LogDate           = request.LogDate;
            productLog.Product           = this._productRepository.FindBy(request.ProductID);

            productLog.ProductSerialFrom  = request.ProductSerialFrom;
            productLog.ProductSerialTo    = request.ProductSerialTo;
            productLog.PurchaseBillNumber = request.PurchaseBillNumber;
            productLog.PurchaseDate       = request.PurchaseDate;
            productLog.PurchaseUnitPrice  = request.PurchaseUnitPrice;
            productLog.SellerName         = request.SellerName;

            productLog.RowVersion = 1;
            productLog.Store      = _storRepository.FindBy(request.StoreID);

            Product product = productLog.Product;

            if (request.IO == -1)
            {
                productLog.UnitsIO = +request.DisplayUnitsIO;
            }
            else
            {
                productLog.UnitsIO = -request.DisplayUnitsIO;
            }



            #region If record exists, Edit UnitsInStock

            StoreProduct storeProduct = new StoreProduct();
            storeProduct = _storeProductrepository.FindBy(request.StoreID, request.ProductID);

            if (storeProduct != null)
            {
                storeProduct.ModifiedDate     = PersianDateTime.Now;
                storeProduct.ModifiedEmployee = _employeeRepository.FindBy(CreateEmployeeID);
                if (request.ProductID != null)
                {
                    storeProduct.Product = this._productRepository.FindBy(request.ProductID);
                }
                if (request.StoreID != null)
                {
                    storeProduct.Store = this._storRepository.FindBy(request.StoreID);
                }

                if (request.IO == -1)
                {
                    if (storeProduct.UnitsInStock < request.DisplayUnitsIO)
                    {
                        response.ErrorMessages.Add("موجودی انبار مجازی کافی نیست");
                        return(response);
                    }
                    else
                    {
                        product.UnitsInStock      += request.DisplayUnitsIO;
                        storeProduct.UnitsInStock -= request.DisplayUnitsIO;
                    }
                }
                if (request.IO == 1)
                {
                    if (productLog.Product.UnitsInStock < request.DisplayUnitsIO)
                    {
                        response.ErrorMessages.Add("موجودی انبار اصلی کافی نیست");
                        return(response);
                    }
                    else
                    {
                        product.UnitsInStock      -= request.DisplayUnitsIO;
                        storeProduct.UnitsInStock += request.DisplayUnitsIO;
                    }
                }
                storeProduct.RowVersion += 1;

                _storeProductrepository.Save(storeProduct);
            }

            else
            {
                StoreProduct _storeProduct = new StoreProduct();
                _storeProduct.ID             = Guid.NewGuid();
                _storeProduct.CreateDate     = PersianDateTime.Now;
                _storeProduct.CreateEmployee = _employeeRepository.FindBy(CreateEmployeeID);
                _storeProduct.Product        = this._productRepository.FindBy(request.ProductID);
                _storeProduct.Store          = this._storRepository.FindBy(request.StoreID);
                _storeProduct.UnitsInStock   = 0;
                if (request.IO == -1)
                {
                    if (storeProduct.UnitsInStock < request.DisplayUnitsIO)
                    {
                        response.ErrorMessages.Add("موجودی انبار مجازی کافی نیست");
                        return(response);
                    }
                    else
                    {
                        product.UnitsInStock       += request.DisplayUnitsIO;
                        _storeProduct.UnitsInStock -= request.DisplayUnitsIO;
                    }
                }
                else
                {
                    if (productLog.Product.UnitsInStock < request.DisplayUnitsIO)
                    {
                        response.ErrorMessages.Add("موجودی انبار اصلی کافی نیست");
                        return(response);
                    }
                    else
                    {
                        product.UnitsInStock       -= request.DisplayUnitsIO;
                        _storeProduct.UnitsInStock += request.DisplayUnitsIO;
                    }
                }
                _storeProduct.RowVersion = 1;

                _storeProductrepository.Add(_storeProduct);
            }


            _productRepository.Save(product);
            _productLogRepository.Add(productLog);
            #endregion

            _uow.Commit();

            return(response);
        }
Пример #24
0
        public ActionResult Edit(TransactionRowViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                using (var ctx = new SalesDbContext())
                {
                    var oldTransaction = ctx.Transactions.Include("Sales").Where(t => t.ID == viewModel.TransactionId).FirstOrDefault();

                    if (oldTransaction != null)
                    {
                        foreach (var item in viewModel.SalesList)
                        {
                            var oldSale = oldTransaction.Sales.Where(x => x.ID == item.ID).FirstOrDefault();

                            //ADD NEW SALE
                            if (oldSale == null)
                            {
                                oldSale = new Sale();
                                oldTransaction.Sales.Add(oldSale);
                                oldTransaction.Update();
                            }

                            //OVERWRITE SALE

                            //CHECK IF SAME PRODUCT
                            if (oldSale.ProductID == item.ProductID)
                            {
                                //LOG CHANGE IN PRODUCT COUNT
                                oldSale.Product = ctx.Products.Where(y => y.ID == item.ProductID).FirstOrDefault();
                                Decimal qtyChanged = oldSale.QTY - item.QTY;

                                oldSale.Product.QTY += qtyChanged;
                                oldSale.Product.Update();

                                ProductLog.GenerateSaleLog(ctx, item.Product, qtyChanged);
                            }
                            else
                            {
                                oldSale.Product = ctx.Products.Where(y => y.ID == item.ProductID).FirstOrDefault();
                                //RETURN ALL OF OLD

                                oldSale.Product.QTY += oldSale.QTY;
                                oldSale.Product.Update();

                                ProductLog.GenerateSaleLog(ctx, item.Product, -oldSale.QTY); //FIX THIS!!

                                //DETUCT ALL OF NEW
                                item.Product         = ctx.Products.Where(z => z.ID == item.ProductID).FirstOrDefault();
                                oldSale.Product      = item.Product;
                                oldSale.Product.QTY -= item.QTY;
                                oldSale.Product.Update();

                                ProductLog.GenerateSaleLog(ctx, item.Product, item.QTY); //FIX THIS!
                            }

                            oldSale.GST       = item.GST;
                            oldSale.Price     = item.Price;
                            oldSale.ProductID = item.ProductID;

                            oldSale.QTY = item.QTY;

                            oldSale.Update();
                        }

                        ctx.SaveChanges();

                        return(RedirectToAction("Read", new { id = viewModel.TransactionId }));
                    }
                    else
                    {
                        ModelState.AddModelError("Not Found", "ID was not found");
                    }
                }
            }

            return(View(viewModel));
        }
Пример #25
0
        private void WriteProductLog(IProduct product)
        {
         //   var product = CurrentSession.GetValue(Session.SessionKeys.Product) as IProduct;
          // var productRepository = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
      
           string line = string.IsNullOrEmpty(this.Line) ? product.Status.Line : this.Line;
           string station = string.IsNullOrEmpty(this.Station) ? CurrentSession.Station:this.Station;
            var productLog = new ProductLog
            {
                Model = product.Model,
                Status = StationStatus.Pass,
                Editor = this.Editor,
                Line = line,
                Station = station,
                Cdt = DateTime.Now
            };

            product.AddLog(productLog);
            //productRepository.Update(product, CurrentSession.UnitOfWork);
        
        }
Пример #26
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns></returns>
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            IProductRepository prodRep = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
            IQTimeRepository qTimeRep = RepositoryFactory.GetInstance().GetRepository<IQTimeRepository, QTime>();
            ILineRepository lineRep = RepositoryFactory.GetInstance().GetRepository<ILineRepository, Line>();
            DateTime now = DateTime.MinValue;
          
            var prod = (Product)CurrentSession.GetValue(Session.SessionKeys.Product);
            string pdline = prod.Status.Line;
            IUnitOfWork uow = new UnitOfWork();
            string defectStation = this.Station;
            string preStation = prod.Status.StationId.Trim();
            string defctcode=  (string)CurrentSession.GetValue(Session.SessionKeys.DefectList);
            TestLog.TestLogStatus defectStatus = TestLog.TestLogStatus.Fail;
            prod.UpdateStatus(new IMES.FisObject.FA.Product.ProductStatus()
                    {
                        Line = pdline,
                        ProId = prod.ProId,
                        TestFailCount = 0,
                        ReworkCode = "",
                        StationId = this.Station,
                        Status = StationStatus.Fail ,
                        Editor = this.Editor,
                        Udt = now
                    });
           IList<IMES.DataModel.TbProductStatus> stationList = prodRep.GetProductStatus(new List<string> { prod.ProId });
           prodRep.UpdateProductPreStationDefered(uow, stationList);

                  

           #region write Productlog

            ProductLog productLog = new ProductLog
                    {
                        Model = prod.Model,
                        Status =StationStatus.Fail ,
                        Editor = this.Editor,
                        Line = pdline,
                        Station = defectStation,
                        Cdt = now
                    };
             prod.AddLog(productLog);

           #endregion
              
           #region add test log
                    string actionName =  "OfflineQTime";
                    string errorCode = "";
                    string descr = "PreStation:" + preStation + "~CurStation:" + this.Station + "~TimeOut:" ;

                    //TestLog testLog = new TestLog(0, prod.ProId, this.Line, "", defectStation, defectStatus, "", this.Editor, "PRD", DateTime.Now);
                    TestLog testLog = new TestLog(0, prod.ProId, pdline, "", defectStation, defectStatus, "",
                                                                        actionName, errorCode, descr, this.Editor, "PRD", now);

                    prod.AddTestLog(testLog);
                    //add defect
                    TestLogDefect defectItem = new TestLogDefect(0, 0, defctcode, this.Editor, now);
                    testLog.AddTestLogDefect(defectItem);
              #endregion   
           prodRep.Update(prod, uow);
           uow.Commit();

            return base.DoExecute(executionContext);
        }
Пример #27
0
        private void writeProductLog(Session session,IProduct product, IMES.FisObject.Common.Station.StationStatus status,  string line)
        {
            var prodRep = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
            var productLog = new ProductLog
            {
                Model = product.Model,
                Status = status,
                Editor = this.Editor,
                Line = line,
                Station = this.Station,
                Cdt = DateTime.Now
            };

            product.AddLog(productLog);
            prodRep.Update(product, session.UnitOfWork);
        }
        private void dgwStockEntranceList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (sender is DataGridView)
            {
                DataGridViewCell cell = ((DataGridView)sender).CurrentCell;
                if (cell.ColumnIndex == ((DataGridView)sender).ColumnCount - 1)
                {
                    DialogResult result = MessageBox.Show("Bạn có muốn xóa phiếu nhập kho này?",
                                                          "Xoá phiếu nhập kho",
                                                          MessageBoxButtons.YesNo,
                                                          MessageBoxIcon.Question);
                    if (result == DialogResult.Yes)
                    {
                        DateTime        systime    = BaoHienRepository.GetBaoHienDBDataContext().GetSystemDate();
                        DataGridViewRow currentRow = dgwStockEntranceList.Rows[e.RowIndex];

                        EntranceStockService entranceStockService = new EntranceStockService();
                        int           id = ObjectHelper.GetValueFromAnonymousType <int>(currentRow.DataBoundItem, "Id");
                        EntranceStock es = entranceStockService.GetEntranceStock(id);

                        ProductLogService          productLogService          = new ProductLogService();
                        EntranceStockDetailService entranceStockDetailService = new EntranceStockDetailService();
                        List <EntranceStockDetail> details = entranceStockDetailService.SelectEntranceStockDetailByWhere(x => x.EntranceStockId == es.Id).ToList();
                        string     msg = "";
                        int        error = 0;
                        ProductLog pl, newpl;
                        foreach (EntranceStockDetail item in details)
                        {
                            pl = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                            if (pl.AfterNumber - item.NumberUnit < 0)
                            {
                                if (error == 0)
                                {
                                    msg  += "Những sản phẩm sau đã bị XÓA nhưng không đảm bảo dữ liệu trong kho:\n";
                                    error = 1;
                                }
                                msg += "- " + productLogService.GetNameOfProductLog(pl) + " : " + item.NumberUnit + "\n";
                            }
                        }
                        if (error > 0)
                        {
                            MessageBox.Show(msg, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        try
                        {
                            foreach (EntranceStockDetail item in details)
                            {
                                pl    = productLogService.GetProductLog(item.ProductId, item.AttributeId, item.UnitId);
                                newpl = new ProductLog()
                                {
                                    ProductId    = item.ProductId,
                                    AttributeId  = item.AttributeId,
                                    UnitId       = item.UnitId,
                                    BeforeNumber = pl.AfterNumber,
                                    Amount       = item.NumberUnit,
                                    AfterNumber  = pl.AfterNumber - item.NumberUnit,
                                    RecordCode   = es.EntranceCode,
                                    Status       = BHConstant.DEACTIVE_STATUS,
                                    Direction    = BHConstant.DIRECTION_OUT,
                                    UpdatedDate  = systime
                                };
                                productLogService.AddProductLog(newpl);
                            }
                            productLogService.DeactiveProductLog(es.EntranceCode);
                            if (!entranceStockService.DeleteEntranceStock(id))
                            {
                                MessageBox.Show("Hiện tại hệ thống đang có lỗi. Vui lòng thử lại sau!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        catch { }
                        loadEntranceStockList();
                    }
                }
            }
        }