Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }