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(); } }
public ActionResult View() { var productTestInfo = new ProductTestInformation(); // or get from the db var productlog = new ProductLog(productTestInfo); return(View()); }
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); }
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(); } } }
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); }
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)); } }
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) { } }
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) { } }
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)); } }
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); }
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(); } }
/// <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); }
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); }
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 } } }
public static ProductLogView ConvertToProductLogView(this ProductLog productLog) { return(Mapper.Map <ProductLog, ProductLogView>(productLog)); }
/// <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); }
/// <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); }
/// <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()); } }
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(); } }
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(); } } } }
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); }
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); }
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); }
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)); }
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); }
/// <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); }
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(); } } } }