public override bool Create(Order item) { if (item == null) { throw new ArgumentNullException("item"); } bool result = false; try { using (XRMSEntities context = new XRMSEntities()) { _uow = new UnitOfWork(context, new RepositoryProvider(RepositoryFactories.Instance())); // add order // get latest order code definition XRMS.Data.EntityFramework.CodeDefinitionEntity code = (_uow.GetDbContext() as XRMS.Data.EntityFramework.XRMSEntities).CodeDefinitionEntities.Where(o => o.Type == "ORDER").FirstOrDefault(); // set order data item.Code = code.Prefix + (code.LastIndex + 1).ToString().PadLeft(7, '0'); // temporarily set id of user is 1 //item.CreatorId = 1; // set order time item.OrderDatetime = _uow.GetDbCurrentDatetime(); Order resultItem = _uow.OrderRepository.Add(item); resultItem.CreatorUser = _uow.UserRepository.GetById(item.CreatorId); // add order report ReportOrder report = new ReportOrder(); report.Code = resultItem.Code; report.CreatorName = resultItem.CreatorUser.Fullname; report = _uow.ReportOrderRepository.Add(report); // add order edition history ReportOrderEdition orderEdition = new ReportOrderEdition(); orderEdition.ReportCounter = report.ReportCounter; orderEdition.EditionUser = resultItem.CreatorUser.Fullname; orderEdition.EditionDate = resultItem.OrderDatetime; orderEdition = _uow.ReportOrderEditionRepository.Add(orderEdition); foreach (OrderItem orderItem in item.OrderItems) { // assign order id and sequence orderItem.OrderId = item.Id; orderItem.CreateDatetime = _uow.GetDbCurrentDatetime(); _uow.OrderItemRepository.Add(orderItem); // add order item edition history ReportOrderItemEdition itemEdition = new ReportOrderItemEdition(); itemEdition.ReportCounter = orderEdition.ReportCounter; itemEdition.EditionCounter = orderEdition.EditionCounter; itemEdition.Sequence = orderItem.Sequence; itemEdition.ProductCode = orderItem.ProductInfo.Code; itemEdition.ProductName = orderItem.ProductInfo.Name; itemEdition.EditionType = 0; itemEdition.EdittedQuantity = orderItem.EdittedQuantity; itemEdition = _uow.ReportOrderItemEditionRepository.Add(itemEdition); } // create order report and order item report // ... // update last index code.LastIndex++; (_uow.GetDbContext() as XRMS.Data.EntityFramework.XRMSEntities).Set <CodeDefinitionEntity>().AddOrUpdate(code); // set table state to busy, and order id matched with table Table table = _uow.TableRepository.GetById(item.TableId); table.State = TableState.Busy; //table.State = 1; table.CurrentOrderId = item.Id; _uow.TableRepository.Update(table); // add event report ReportEvent reportEvent = new ReportEvent(); reportEvent.ReportCounter = report.ReportCounter; reportEvent.EventClass = 0; reportEvent.EventDate = _uow.GetDbCurrentDatetime(); reportEvent.Text = resultItem.CreatorUser.Fullname + " created order " + resultItem.Code + " for table \"" + table.Name + "\""; reportEvent = _uow.ReportEventRepository.Add(reportEvent); // commit _uow.SaveChanges(); result = true; } } catch (Exception ex) { throw new Exception(this.GetType().FullName + System.Reflection.MethodBase.GetCurrentMethod().Name + ": " + ex.Message); } return(result); }
public override bool Update(Order item) { if (item == null) { throw new ArgumentNullException("item"); } bool result = false; try { using (XRMSEntities context = new XRMSEntities()) { _uow = new UnitOfWork(context, new RepositoryProvider(RepositoryFactories.Instance())); // get order report, useful for writing report ReportOrder report = _uow.ReportOrderRepository.GetByOrderCode(item.Code); item.Table = _uow.TableRepository.GetById(item.TableId); Order order = _uow.OrderRepository.GetById(item.Id); // change table if (order.TableId != item.TableId) { // assign order to new table and free old table // set table state to busy, and order id matched with table Table oldTable = _uow.TableRepository.GetById(order.TableId); oldTable.State = TableState.Free; //oldTable.State = 0; oldTable.CurrentOrderId = 0; _uow.TableRepository.Update(oldTable); Table newTable = item.Table; newTable.State = TableState.Busy; //newTable.State = 1; newTable.CurrentOrderId = item.Id; _uow.TableRepository.Update(newTable); // add event report ReportEvent reportEvent = new ReportEvent(); reportEvent.ReportCounter = report.ReportCounter; reportEvent.EventClass = 0; reportEvent.EventDate = _uow.GetDbCurrentDatetime(); //reportEvent.Text = "Test"; reportEvent.Text = item.LockKeeper.Fullname + " changed order " + item.Code + " from table \"" + oldTable.Name + "\"" + " to \"" + newTable.Name + "\""; reportEvent = _uow.ReportEventRepository.Add(reportEvent); } // update order item.EditDatetime = _uow.GetDbCurrentDatetime(); _uow.OrderRepository.Update(item); /*item.EditDatetime = _uow.GetDbCurrentDatetime(); * _uow.OrderRepository.Update(item);*/ // add order edition history ReportOrderEdition orderEdition = new ReportOrderEdition(); orderEdition.ReportCounter = report.ReportCounter; orderEdition.EditionUser = item.CreatorUser.Fullname; orderEdition.EditionDate = _uow.GetDbCurrentDatetime(); orderEdition = _uow.ReportOrderEditionRepository.Add(orderEdition); // process deleted list first foreach (OrderItem orderItem in (List <OrderItem>)(item.OrderItems as IEditableCollection).GetDeletedList()) { if (!orderItem.IsNew) { _uow.OrderItemRepository.Remove(orderItem); } } foreach (OrderItem orderItem in item.OrderItems) { if (orderItem.IsDirty) { byte editionType = 0; if (orderItem.IsNew == false) { try { _uow.OrderItemRepository.Update(orderItem); if (orderItem.IsCancelled == true) { // cancel editionType = 3; } else { if (orderItem.EdittedQuantity > 0) { // increase editionType = 1; } else { // decrease editionType = 2; } } } catch (Exception ex) { throw new Exception(ex.Message + "\nOrderItem: " + orderItem.OrderId.ToString() + " " + orderItem.Sequence.ToString()); } } else { // assign order id and sequence orderItem.OrderId = item.Id; orderItem.CreateDatetime = _uow.GetDbCurrentDatetime(); _uow.OrderItemRepository.Add(orderItem); } // add order item edition history ReportOrderItemEdition itemEdition = new ReportOrderItemEdition(); itemEdition.ReportCounter = orderEdition.ReportCounter; itemEdition.EditionCounter = orderEdition.EditionCounter; itemEdition.Sequence = orderItem.Sequence; itemEdition.ProductCode = orderItem.ProductInfo.Code; itemEdition.ProductName = orderItem.ProductInfo.Name; itemEdition.EditionType = editionType; itemEdition.EdittedQuantity = orderItem.EdittedQuantity; itemEdition = _uow.ReportOrderItemEditionRepository.Add(itemEdition); } } // error when insert event report 2 times, need one more commit _uow.SaveChanges(); // add event report ReportEvent reportEvent1 = new ReportEvent(); reportEvent1.ReportCounter = report.ReportCounter; reportEvent1.EventClass = 0; reportEvent1.EventDate = _uow.GetDbCurrentDatetime(); reportEvent1.Text = item.LockKeeper.Fullname + " editted order " + item.Code + " for table \"" + item.Table.Name + "\""; reportEvent1 = _uow.ReportEventRepository.Add(reportEvent1); // commit _uow.SaveChanges(); result = true; } } catch (Exception ex) { throw new Exception(this.GetType().FullName + System.Reflection.MethodBase.GetCurrentMethod().Name + ": " + ex.Message); } return(result); }