示例#1
0
        // not mapped
        // handle duplicates outside
        // simple version that deals with one type of pack only
        public async Task <AppOrder> AddOneOrder(int quantity, AppOrder order)
        {
            // Order table

            var newOrder = new Order
            {
                OrderId = order.OrderId,
                UserId  = order.OrdererId,
                Date    = order.Date,
                Total   = order.Total,
            };
            await _context.Orders.AddAsync(newOrder);

            await _context.SaveChangesAsync();

            // OrderItem table
            // order packA quan 2
            // order packB quan 3
            // for loop
            var newOrderItem = new OrderItem
            {
                OrderId = order.OrderId,
                PackId  = order.PackId,
                PackQty = quantity,
            };
            await _context.OrderItems.AddAsync(newOrderItem);

            await _context.SaveChangesAsync();

            return(order);
        }
示例#2
0
        private void btnOrdenar_Click(object sender, EventArgs e)
        {
            AppOrder o = new AppOrder();

            o.createDate = dateTimePicker1.Value;
            o.idAddress  = (int)cmbAiD.SelectedValue;
            o.idProduct  = (int)cmbPiD.SelectedValue;

            try
            {
                AppOrderDAO.addOrder(o);

                MessageBox.Show($"Orden agregada exitosamente.",
                                "HugoApp - Food Delivery",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);

                btnClearProduct_Click(sender, e);
                actualizarControlesCommon();
                actualizarTablasCommon();
            }
            catch (Exception exception)
            {
                MessageBox.Show("Error: " + exception.Message, "Error dialog",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public async Task <ActionResult <OrderCreateDTO> > Post(OrderCreateDTO newOrder)
        {
            //check if order exists
            var check = await _orderRepo.GetOneOrder(newOrder.OrderId);

            if (check == null)
            {
                var createdOrder = new AppOrder()
                {
                    //order
                    OrderId   = await _orderRepo.IdGen(),
                    OrdererId = newOrder.UserId,
                    Date      = newOrder.Date,
                    Total     = newOrder.Total,

                    //order details
                    PackId  = newOrder.PackId,
                    PackQty = newOrder.PackQty // pack qty saved in order detail db table
                };

                //execute any business logic associated with the order
                createdOrder.Pack = await _packRepo.GetOnePack(createdOrder.PackId);

                createdOrder.Orderer = await _userRepo.GetOneUser(createdOrder.OrdererId);

                createdOrder.CalculateTotal();
                //createdOrder.FillOrder();

                //should just call fillOrder(), will modify later
                Random rand = new Random();
                if (createdOrder.Orderer.CurrencyAmount >= createdOrder.Total)
                {
                    createdOrder.Orderer.CurrencyAmount -= createdOrder.Total;
                    int cards = 5 * createdOrder.PackQty;
                    for (int i = 0; i < cards; ++i)
                    {
                        string  cardId = Convert.ToString(rand.Next(64)); //only grabs from the first 64 cards in the set, PackId = base set number
                        AppCard card   = await _orderRepo.GetCardFromApi(cardId, createdOrder.PackId);

                        createdOrder.Orderer.AddCardToInventory(card); //add to the AppUser
                        await _cardRepo.AddOneCard(card);              //add to card table

                        await _userRepo.AddOneCardToOneUser(createdOrder.OrdererId, card.CardId);
                    }
                }
                else
                {
                    throw new Exception("User funds insufficient.");
                }
                await _userRepo.UpdateUserById(createdOrder.OrdererId, createdOrder.Orderer);

                await _orderRepo.AddOneOrder(createdOrder.PackQty, createdOrder);

                return(CreatedAtAction(nameof(GetOrderById), new { id = createdOrder.OrderId }, createdOrder)); //201 new order created
            }

            return(Conflict()); //order already exists and cant be created
        }
示例#4
0
        private AppOrder createAppOrder(String buySell, String triggerRule, double triggerPrice, String remark, Order order, DateTime currentTimeStamp)
        {
            AppOrder appOrder = AppObjectUtil.createAppOrder(stgName, order, stgIndex);

            appOrder.IBOrder      = order;
            appOrder.TriggerRule  = triggerRule;
            appOrder.TriggerPrice = triggerPrice;
            appOrder.TriggerTime  = currentTimeStamp;
            appOrder.Remark       = remark;
            return(appOrder);
        }
示例#5
0
 private void setupOrderAndContext(AppOrder appOrder, String buySell, double triggerPrice, String remark, int indexExecution)
 {
     appOrderManager.addAppOrUpdateOrder(appOrder);
     appOrderManager.addOpenAppOrder(stgIndex, appOrder);
     if (indexExecution == 1)
     {
         execution.setPendingSignal1(buySell, triggerPrice, appOrder, remark);
     }
     else
     {
         execution.setPendingSignal2(buySell, triggerPrice, appOrder, remark);
     }
 }
示例#6
0
        public void Run()
        {
            var appOrder = new AppOrder();

            if (appOrder == null)
            {
                WriteLine("appOrder == null:appOrder is null");
            }
            if (appOrder is null)
            {
                WriteLine("appOrder is null:appOrder is null");
            }
        }
示例#7
0
        public void placeStopTrade(String buySell, String triggerRule, double triggerPrice, String remark, int size, int indexExecution)
        {
            DateTime currentTimeStamp = DateTime.Now;
            AppOrder appOrder         = null;

            lock (OrderIDLock)
            {
                Order order = createStopOrder(buySell, triggerPrice, size);
                appOrder = createAppOrder(buySell, triggerRule, triggerPrice, remark, order, currentTimeStamp);
                setupOrderAndContext(appOrder, buySell, triggerPrice, remark, indexExecution);
                appStgManager.getOrderManager().PlaceOrder(appStgManager.CurrentContract, order);
            }
            persistOrderRecord(appOrder, currentTimeStamp);
        }
示例#8
0
        public static AppOrder createAppOrder(String stgShortName, Order order, int stgIndex)
        {
            AppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex     = stgIndex;
            appOrder.OrderId           = order.OrderId;
            appOrder.OrderType         = order.OrderType;
            appOrder.BuySell           = order.Action;
            appOrder.TotalQuantity     = order.TotalQuantity;
            appOrder.LmtPrice          = order.LmtPrice;
            appOrder.AuxPrice          = order.AuxPrice;
            appOrder.StratgeyShortName = stgShortName;
            return(appOrder);
        }
        private IAppOrder createOrder_for_addAppOrUpdateOrder()
        {
            IAppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex     = 3;
            appOrder.OrderId           = 1001;
            appOrder.OrderType         = AppConstant.ORDER_TYPE_LIMIT;
            appOrder.BuySell           = AppConstant.SELL_SIGNAL;
            appOrder.TotalQuantity     = 10;
            appOrder.LmtPrice          = 22000;
            appOrder.AuxPrice          = 0;
            appOrder.StratgeyShortName = "Test Strategy 1";
            return(appOrder);
        }
示例#10
0
        private void persistOrderRecord(AppOrder appOrder, DateTime currentTimeStamp)
        {
            Order       order  = appOrder.IBOrder;
            OrderRecord orderR = new OrderRecord();

            orderR.orderId   = order.OrderId;;
            orderR.sno       = stgName;
            orderR.orderTime = currentTimeStamp;
            appOrderManager.addOrderRecordToRepositry(order.OrderId.ToString(), orderR);
            List <OrderRecord> orderRecords = new List <OrderRecord>();

            orderRecords.Add(orderR);
            appOrderManager.OrderPersister.SaveLastRow(orderRecords);
        }
        private IAppOrder createOrder_Sell1Contract_0Complete()
        {
            IAppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex     = 1;
            appOrder.OrderId           = 1001;
            appOrder.OrderType         = AppConstant.ORDER_TYPE_STOP;
            appOrder.BuySell           = AppConstant.SELL_SIGNAL;
            appOrder.TotalQuantity     = 1;
            appOrder.LmtPrice          = 0;
            appOrder.AuxPrice          = 22000;
            appOrder.StratgeyShortName = "Test Strategy 1";
            return(appOrder);
        }
示例#12
0
        //ToDo: createMktOrder()
        //ToDo: createStopOrder()
        //ToDo: createLimitOrder()
        //ToDo: createAppOrder()

        private IAppOrder createOrder_1Contract_1Complete()
        {
            IAppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex     = 1;
            appOrder.OrderId           = 1001;
            appOrder.OrderType         = AppConstant.ORDER_TYPE_LIMIT;
            appOrder.BuySell           = AppConstant.BUY_SIGNAL;
            appOrder.TotalQuantity     = 1;
            appOrder.LmtPrice          = 20000;
            appOrder.AuxPrice          = 0;
            appOrder.StratgeyShortName = "Test Strategy 1";
            appOrder.addExecution(createExecution1Contract());
            return(appOrder);
        }
示例#13
0
 /// <summary>
 /// 创建业务员配送单(但是未结算)
 /// </summary>
 /// <param name="order">订单信息</param>
 /// <param name="user">业务员信息</param>
 /// <param name="outStock">出库单信息</param>
 /// <remarks>2014-9-17  朱成果 创建</remarks>
 private void DeliveryTwoSaleSoOrder(AppOrder order, SyUser user, WhStockOut outStock)
 {
     if (order.Invoice != null)
     {
         order.Invoice.LastUpdateBy   = user.SysNo;
         order.Invoice.LastUpdateDate = DateTime.Now;
         order.Invoice.Status         = (int)Hyt.Model.WorkflowStatus.FinanceStatus.发票状态.已开票;
         Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderInvoice(order.Invoice); //更新发票 余勇 修改 改为调用业务层方法
     }
     outStock.Status       = (int)Hyt.Model.WorkflowStatus.WarehouseStatus.出库单状态.配送中;
     outStock.StockOutBy   = user.SysNo;
     outStock.StockOutDate = DateTime.Now;
     Hyt.DataAccess.Warehouse.IOutStockDao.Instance.Update(outStock);                 //更新出库单状态
     GenerateOtherDataForTwoSale(order, user, outStock);                              //创建业务员配送单
     Hyt.BLL.Warehouse.WhWarehouseBo.Instance.UpdateErpProductNumber(outStock.SysNo); //修改EAS库存
 }
示例#14
0
        public void processExecution(ExecutionMessage message)
        {
            IAppOrderManager orderManager = appStgManager.getAppOrderManager();

            String[] stgNames = appStgManager.getStgNames();
            if (!appStgManager.getAppOrderManager().AppOrderStore.ContainsKey(message.Execution.OrderId))
            {
                return;
            }
            if (!orderManager.isExecutionProcessed(message.Execution.ExecId))
            {
                AppExecution execution  = orderManager.updateAppOrderExecution(message);
                IAppOrder    order      = orderManager.AppOrderStore[message.Execution.OrderId];
                AppOrder     cloneOrder = (AppOrder)order.Clone();
                if (AppObjectUtil.isOrderClosed(cloneOrder))
                {
                    orderManager.closeOpenAppOrder(order.StrategyIndex, order);
                }
                orderManager.updatePosition(order.StrategyIndex, execution);
                String      stgName     = stgNames[order.StrategyIndex];
                AppPosition stgPosition = orderManager.StoreStgPositions[stgName];
                log.Info("Total PnL : " + stgPosition.TotalPnL);
                orderManager.markExeProcessed(message.Execution.ExecId);

                //***New for send order executed email***
                IAppEventManager appEventManager = appStgManager.getAppEventManager();
                appEventManager.putOrderExeEvents(message, stgName);

                /*TSAppExecution execution = appForm.StrategyManager.updateAppOrderExecution(message);
                 * TSAppOrder order = appForm.StrategyManager.AppOrderStore[message.Execution.OrderId];
                 * TSAppOrder cloneOrder = (TSAppOrder)order.Clone();
                 * if (StrategyManager.isOrderClosed(cloneOrder))
                 * {
                 *  appForm.StrategyManager.closeOpenAppOrder(order.StrategyIndex, order);
                 *  //appForm.StrategyManager.removeOpenAppOrder(order.StrategyIndex, order);
                 *  //appForm.StrategyManager.addClosedAppOrder(order.StrategyIndex, order);
                 * }
                 * appForm.StrategyManager.updatePosition(order.StrategyIndex, execution);
                 * String stgName = appForm.StrategyManager.StgNames[order.StrategyIndex];
                 * AppPosition stgPosition = appForm.StrategyManager.StoreStgPositions[stgName];
                 * log.Info("Total PnL : " + stgPosition.TotalPnL);
                 * //log.Info("Total PnL : " + appForm.StrategyManager.StgPositions[order.StrategyIndex].TotalPnL);
                 * appForm.StrategyManager.markExeProcessed(message.Execution.ExecId);*/
            }
            log.Info("Order Executed");
            log.Info("*********************************************");
        }
示例#15
0
        /// <summary>
        /// 创建业务员配送单(但是未结算)
        /// </summary>
        /// <param name="order">订单信息</param>
        /// <param name="user">业务员信息</param>
        /// <remarks>2014-9-17  朱成果 创建</remarks>
        public void DeliveryTwoSaleSoOrder(AppOrder order, SyUser user)
        {
            bool flg = SoOrderBo.Instance.AuditSoOrder(order.SoOrder.SysNo, user.SysNo, false);//审核订单

            if (flg)
            {
                foreach (var pitem in order.Products)
                {
                    pitem.RealStockOutQuantity = pitem.Quantity;                                                             ////如果不设置分摊会出错
                }
                var outStock = SoOrderBo.Instance.CreateOutStock(order.Products, order.SoOrder.DefaultWarehouseSysNo, user); //订单出库
                if (outStock != null)
                {
                    DeliveryTwoSaleSoOrder(order, user, outStock);//创建业务员配送单(但是未结算)
                }
            }
        }
示例#16
0
        /// <summary>
        /// 构建业务员配送单信息
        /// </summary>
        /// <param name="order">订单</param>
        /// <param name="user">业务员</param>
        /// <param name="outStock">出库单</param>
        /// <remarks>2014-9-17  朱成果 创建</remarks>
        private void GenerateOtherDataForTwoSale(AppOrder order, SyUser user, WhStockOut outStock)
        {
            var  payType   = PaymentTypeBo.Instance.GetPaymentTypeFromMemory(order.SoOrder.PayTypeSysNo);
            bool isNeedPay = payType.PaymentType == (int)BasicStatus.支付方式类型.预付;//是否预付
            var  delivery  = new LgDelivery()
            {
                DeliveryUserSysNo = user.SysNo,
                DeliveryTypeSysNo = outStock.DeliveryTypeSysNo,
                CreatedBy         = user.SysNo,
                CreatedDate       = DateTime.Now,
                Status            = (int)LogisticsStatus.配送单状态.配送在途,
                StockSysNo        = outStock.WarehouseSysNo,
                IsEnforceAllow    = 0,
                PaidAmount        = isNeedPay ? order.SoOrder.CashPay : 0,
                CODAmount         = isNeedPay ? 0 : order.SoOrder.CashPay,
            };
            var deliverySysNo = Hyt.DataAccess.Logistics.ILgDeliveryDao.Instance.CreateLgDelivery(delivery);//创建配送单
            var deliveryItem  = new LgDeliveryItem()
            {
                DeliverySysNo    = deliverySysNo,
                NoteType         = (int)Hyt.Model.WorkflowStatus.LogisticsStatus.配送单据类型.出库单,
                NoteSysNo        = outStock.SysNo,
                Status           = (int)Hyt.Model.WorkflowStatus.LogisticsStatus.配送单明细状态.待签收,
                AddressSysNo     = outStock.ReceiveAddressSysNo,
                TransactionSysNo = outStock.TransactionSysNo,
                StockOutAmount   = outStock.StockOutAmount,
                PaymentType      = payType.PaymentType,
                Receivable       = !isNeedPay ? order.SoOrder.CashPay : 0,
                IsCOD            = !isNeedPay ? (int)Hyt.Model.WorkflowStatus.LogisticsStatus.是否到付.是 : (int)Hyt.Model.WorkflowStatus.LogisticsStatus.是否到付.否,
                Remarks          = "【二次销售自动创建】",
                CreatedBy        = user.SysNo,
                CreatedDate      = DateTime.Now
            };

            Hyt.DataAccess.Logistics.ILgDeliveryDao.Instance.AddDeliveryItem(deliveryItem);//配送单明细
            Order.SoOrderBo.Instance.WriteSoTransactionLog(outStock.TransactionSysNo,
                                                           "出库单" + outStock.SysNo +
                                                           "分配配送成功,配送单<span style='color:red'>" +
                                                           deliverySysNo + "</span>",
                                                           user.UserName);//日志
            string msg = "出库单" + outStock.SysNo + "由百城当日达配送员<span style='color:red'>{0}</span>配送中,送货人联系电话<span style='color:red'>{1}</span>";

            msg = string.Format(msg, user.UserName, user.MobilePhoneNumber);
            Order.SoOrderBo.Instance.WriteSoTransactionLog(outStock.TransactionSysNo, msg, user.UserName);//日志
        }
示例#17
0
        // not mapped
        public async Task <AppOrder> GetOneOrder(string id)
        {
            var dbOrder = await _context.Orders.FirstOrDefaultAsync(x => x.OrderId == id);

            if (dbOrder == null)
            {
                return(null);
            }
            var AppOrder = new AppOrder
            {
                OrderId   = dbOrder.OrderId,
                OrdererId = dbOrder.UserId,
                Date      = dbOrder.Date,
                Total     = dbOrder.Total,
            };

            return(AppOrder);
        }
        private IAppOrder createOrder_Sell3Contract()
        {
            IAppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex     = 2;
            appOrder.OrderId           = 1001;
            appOrder.OrderType         = AppConstant.ORDER_TYPE_LIMIT;
            appOrder.BuySell           = AppConstant.SELL_SIGNAL;
            appOrder.TotalQuantity     = 3;
            appOrder.LmtPrice          = 23100;
            appOrder.AuxPrice          = 0;
            appOrder.StratgeyShortName = "Test Strategy 1";

            Order IBOrder = new Order();

            IBOrder.OrderId  = 1001;
            appOrder.IBOrder = IBOrder;
            return(appOrder);
        }
示例#19
0
        private IAppOrder createSellOrder_10Contract_10Complete(int position, String reason, String rule)
        {
            IAppOrder appOrder = new AppOrder();

            appOrder.StrategyIndex = 3;
            appOrder.OrderId       = 1002;
            appOrder.OrderType     = AppConstant.ORDER_TYPE_LIMIT;
            appOrder.BuySell       = AppConstant.SELL_SIGNAL;
            appOrder.TotalQuantity = position;
            appOrder.Position      = 0;
            appOrder.LmtPrice      = 20400;
            appOrder.TriggerPrice  = 20400;
            appOrder.AuxPrice      = 0;

            appOrder.TriggerRule = rule;
            appOrder.Remark      = reason;

            appOrder.addExecution(createSellExecution10Contract());
            appOrder.StratgeyShortName = "Test Strategy 1";
            return(appOrder);
        }
示例#20
0
 /// <summary>
 /// 验证订单数据
 /// </summary>
 /// <param name="order">订单</param>
 ///<param name="user">配送员</param>
 /// <remarks>2014-9-17  朱成果 创建</remarks>
 private void CheckAppOrder(AppOrder order, SyUser user)
 {
     if (order == null || order.SoOrder == null)
     {
         throw new HytException("订单信息不能为空");
     }
     if (order.Products == null || order.Products.Count < 1)
     {
         throw new HytException("订购商品信息不能为空");
     }
     if (order.SoReceiveAddress == null)
     {
         throw new HytException("收货地址不能为空");
     }
     if (user == null)
     {
         throw new HytException("配送员信息不能为空");
     }
     if (order.SoOrder.CustomerSysNo < 1)
     {
         throw new HytException("购买客户信息不能为空");
     }
 }
示例#21
0
        /// <summary>
        /// 创建二次销售订单
        /// </summary>
        /// <param name="order">订单信息</param>
        /// <param name="user">用户信息</param>
        /// <param name="hasDelivery">是否配送员立即配送</param>
        /// <returns></returns>
        /// <remarks>2014-9-17  朱成果 创建</remarks>
        public AppOrder CreateTwoSaleSoOrder(AppOrder order, SyUser user, bool hasDelivery = true)
        {
            CheckAppOrder(order, user);//验证订单数据

            #region 创建销售单
            var payType = PaymentTypeBo.Instance.GetPaymentTypeFromMemory(order.SoOrder.PayTypeSysNo);
            order.SoOrder.OnlineStatus          = payType.PaymentType == (int)BasicStatus.支付方式类型.到付 ? Constant.OlineStatusType.待审核 : Constant.OlineStatusType.待支付;
            order.SoOrder.Status                = (int)OrderStatus.销售单状态.待审核;
            order.SoOrder.PayStatus             = (int)OrderStatus.销售单支付状态.未支付;
            order.SoOrder.OrderCreatorSysNo     = order.SoOrder.LastUpdateBy = user.SysNo;
            order.SoOrder.CreateDate            = order.SoOrder.LastUpdateDate = DateTime.Now;
            order.SoOrder.DefaultWarehouseSysNo = BLL.Warehouse.WhWarehouseBo.Instance.GetDeliveryUserWarehouseSysNo(user.SysNo);//获取仓库信息
            order.SoOrder.OrderSource           = (int)OrderStatus.销售单来源.业务员下单;
            order.SoOrder.OrderSourceSysNo      = user.SysNo;
            if (order.SoOrder.DefaultWarehouseSysNo < 1)
            {
                throw new HytException("配送员仓库信息获取失败");
            }
            var whinfo = WhWarehouseBo.Instance.GetWarehouse(order.SoOrder.DefaultWarehouseSysNo); //仓库信息
            if (hasDelivery)                                                                       //马上配送
            {
                order.SoOrder.DeliveryTypeSysNo = DeliveryType.普通百城当日达;
                if (payType.PaymentType == (int)BasicStatus.支付方式类型.到付)//此情况不允许下到付订单
                {
                    throw new HytException("此流程必须先收款。");
                }
            }
            else//不必立刻配送
            {
                bool Isdrd = false;//是否满足当日达
                if (whinfo != null)
                {
                    var zb = Hyt.BLL.Map.BaiduMapAPI.Instance.Geocoder(order.SoReceiveAddress.StreetAddress, whinfo.CityName);//仓库所在城市->收货地址
                    if (zb != null)
                    {
                        Isdrd = LgDeliveryScopeBo.Instance.IsInScope(whinfo.CitySysNo, new Coordinate()
                        {
                            X = zb.Lng, Y = zb.Lat
                        });                                                                                                        //是否支持当日达
                    }
                }
                order.SoOrder.DeliveryTypeSysNo = Isdrd?DeliveryType.普通百城当日达:DeliveryType.第三方快递;
            }
            ISoReceiveAddressDao.Instance.InsertEntity(order.SoReceiveAddress); //收货地址
            order.SoOrder.ReceiveAddressSysNo = order.SoReceiveAddress.SysNo;   //收货地址
            if (order.Invoice != null)                                          //发票信息
            {
                order.Invoice.Status      = FinanceStatus.发票状态.待开票.GetHashCode();
                order.Invoice.CreatedBy   = order.Invoice.LastUpdateBy = user.SysNo;
                order.Invoice.CreatedDate = order.Invoice.LastUpdateDate = DateTime.Now;
                IFnInvoiceDao.Instance.InsertEntity(order.Invoice);
                order.SoOrder.InvoiceSysNo = order.Invoice.SysNo;
            }
            ISoOrderDao.Instance.InsertEntity(order.SoOrder);                  //创建订单
            order.SoOrder = SoOrderBo.Instance.GetEntity(order.SoOrder.SysNo); //获取订单
            foreach (var item in order.Products)                               //创建订单明细
            {
                item.OrderSysNo       = order.SoOrder.SysNo;
                item.TransactionSysNo = order.SoOrder.TransactionSysNo;
                item.SysNo            = ISoOrderItemDao.Instance.Insert(item);
            }
            SoOrderBo.Instance.WriteSoTransactionLog(order.SoOrder.TransactionSysNo, string.Format(Constant.ORDER_TRANSACTIONLOG_CREATE, order.SoOrder.SysNo), user.UserName);//创建订单日志
            #endregion

            #region 订单收款单
            decimal shoupay = SoOrderBo.Instance.SynchronousOrderAmount(order.SoOrder.SysNo, true); //同步订单价格
            order.SoOrder.CashPay             = shoupay;
            order.SoOrder.ProductChangeAmount = order.Products.Sum(m => m.ChangeAmount);            //记录调价总额
            Finance.FnReceiptVoucherBo.Instance.CreateReceiptVoucherByOrder(order.SoOrder);         //创建订单收款单
            if (payType.PaymentType == (int)BasicStatus.支付方式类型.预付)
            {
                var easinfo = Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.GetFnReceiptTitleAssociation(order.SoOrder.DefaultWarehouseSysNo, payType.SysNo).OrderByDescending(m => m.IsDefault).FirstOrDefault();//eas信息
                FnReceiptVoucherItem fvitem = new FnReceiptVoucherItem()
                {
                    Amount               = order.SoOrder.CashPay,
                    CreatedDate          = DateTime.Now,
                    PaymentTypeSysNo     = order.SoOrder.PayTypeSysNo,
                    TransactionSysNo     = order.SoOrder.TransactionSysNo,
                    Status               = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款单明细状态.效,
                    EasReceiptCode       = easinfo == null?string.Empty:easinfo.EasReceiptCode,  //eas收款科目
                    ReceivablesSideType  = (int)Hyt.Model.WorkflowStatus.FinanceStatus.收款方类型.仓库, //收款方来源
                    ReceivablesSideSysNo = order.SoOrder.DefaultWarehouseSysNo,
                    CreatedBy            = user.SysNo
                };
                Finance.FnReceiptVoucherBo.Instance.InsertOrderReceiptVoucher(order.SoOrder.SysNo, fvitem);       //插入收款单明细
                Hyt.BLL.Finance.FnReceiptVoucherBo.Instance.AutoConfirmReceiptVoucher(order.SoOrder.SysNo, user); //收现金自动确认收款单
                if (order.SoOrder.PayTypeSysNo == PaymentType.现金预付)
                {
                    InsertTwoSaleCashHistory(
                        new Rp_业务员二次销售()
                    {
                        CreateDate        = order.SoOrder.CreateDate,
                        DeliveryUserSysNo = user.SysNo,
                        DeliveryUserName  = user.UserName,
                        StockSysNo        = whinfo.SysNo,
                        StockName         = whinfo.WarehouseName,
                        OrderSysNo        = order.SoOrder.SysNo,
                        OrderAmount       = order.SoOrder.CashPay
                    }
                        );
                }//二次销售收款记录
            }
            #endregion
            //同步支付时间的到订单主表
            ISoOrderDao.Instance.UpdateOrderPayDteById(order.SoOrder.SysNo);
            #region 创建审单任务(可选)
            if (!hasDelivery)                                                       //未配送
            {
                SyJobPoolPublishBo.Instance.OrderAuditBySysNo(order.SoOrder.SysNo); //创建审单任务
                SyJobDispatcherBo.Instance.WriteJobLog(string.Format("二次销售下单成功创建订单审核任务,销售单编号:{0}", order.SoOrder.SysNo), order.SoOrder.SysNo, null, 0);
            }
            #endregion

            return(order);
        }
示例#22
0
        // возвращает признак того, что были сделаны какие-то изменения во внутренней коллекции заказов
        private bool updateAppOrders(List <Order> orders)
        {
            bool retVal = false;
            // признак того, что появился заказ в статусе ГОТОВ и надо проиграть мелодию
            bool isCooked = false;

            if ((orders == null) || (orders.Count == 0))
            {
                hideCells(G15); hideCells(G24);
                _appOrders.Clear();
                AppLib.WriteLogTraceMessage("- app-orders clear");
                return(true);
            }

            int[] dbIds = orders.Select(o => o.Id).ToArray();
            // удалить выданные заказы
            int[] delIds = _appOrders.Select(o => o.Id).Except(dbIds).ToArray();
            if (delIds.Length > 0)
            {
                foreach (int item in delIds)
                {
                    _appOrders.RemoveAll(o => o.Id == item);
                }
                AppLib.WriteLogTraceMessage("- app-orders remove(ids): " + string.Join(",", delIds));
                retVal = true;
            }

            // добавить новые
            double   estDT       = (double)WpfHelper.GetAppGlobalValue("OrderEstimateTime", 0d);
            string   ordersAdded = null;
            AppOrder curAppOrd;

            foreach (Order dbOrd in orders)
            {
                curAppOrd = _appOrders.FirstOrDefault(ao => (ao.Id == dbOrd.Id));
                // add new
                if (curAppOrd == null)
                {
                    AppOrder newAppOrder = new AppOrder()
                    {
                        Id = dbOrd.Id, Order = dbOrd
                    };
                    // удалить граничные пробелы из имени клиента
                    if (!newAppOrder.Order.ClientName.IsNull())
                    {
                        newAppOrder.Order.ClientName = newAppOrder.Order.ClientName.Trim();
                    }
                    //newAppOrder.IsExistOrderEstimateDT = (estDT != 0d);
                    //newAppOrder.OrderCookingBaseDT = (estDT == 0d) ? dbOrd.CreateDate : dbOrd.CreateDate.AddMinutes(estDT);
                    // новый заказ сразу в статусе ГОТОВ
                    if (dbOrd.QueueStatusId == 1)
                    {
                        isCooked = true;
                    }

                    _appOrders.Add(newAppOrder);
                    if (ordersAdded == null)
                    {
                        ordersAdded = dbOrd.Id.ToString();
                    }
                    else
                    {
                        ordersAdded += "," + dbOrd.Id.ToString();
                    }
                    retVal = true;
                }

                // update exists
                else
                {
                    // заказ поменял статус
                    if (curAppOrd.Order.QueueStatusId != dbOrd.QueueStatusId)
                    {
                        if (dbOrd.QueueStatusId == 1)
                        {
                            isCooked = true;                           // ready
                        }
                        // изменения в лог
                        AppLib.WriteLogTraceMessage("- app-order id {0} changing its state: {1}({2}) to {3}({4})",
                                                    dbOrd.Id, curAppOrd.Order.QueueStatusId, (OrderStatusEnum)curAppOrd.Order.QueueStatusId,
                                                    dbOrd.QueueStatusId, (OrderStatusEnum)dbOrd.QueueStatusId);
                        retVal = true;
                    }

                    curAppOrd.Order = dbOrd;
                }
            }

            // в лог новые заказы
            if (ordersAdded != null)
            {
                AppLib.WriteLogTraceMessage("- app-orders add(ids): " + ordersAdded);
            }
            // проиграть мелодию
            if ((isCooked) && (simpleSound != null))
            {
                simpleSound.Play();
            }

            // если есть изменения
            if (retVal)
            {
                // сортировка orderby o.CreateDate ascending, o.Number ascending
                _appOrders = _appOrders.OrderBy(o => o.Order.CreateDate).ThenBy(o => o.Order.Number).ToList();
            }

            return(retVal);
        }
示例#23
0
        /// <summary>
        /// 订单对象转换
        /// </summary>
        /// <param name="order">wcf 传入订单对象</param>
        /// <returns></returns>
        /// <remarks>2014-9-17  朱成果 创建</remarks>
        public AppOrder MapToAppOrder(AppOrder2 order)
        {
            AppOrder neworder   = new AppOrder();
            int      levelSysNo = 0;//客户等级

            if (order != null)
            {
                if (order.SoReceiveAddress != null)
                {
                    neworder.SoReceiveAddress = order.SoReceiveAddress;
                }
                if (order.Order != null)
                {
                    #region 订单和发票
                    var oo = order.Order;
                    neworder.SoOrder = new SoOrder()
                    {
                        CustomerSysNo         = oo.CustomerSysNo,
                        PayTypeSysNo          = oo.PayTypeSysNo,
                        DeliveryTypeSysNo     = oo.DeliveryTypeSysNo,
                        DeliveryRemarks       = oo.DeliveryRemarks,
                        DeliveryTime          = oo.DeliveryTime,
                        ContactBeforeDelivery = oo.ContactBeforeDelivery,
                        InternalRemarks       = oo.InternalRemarks,
                        CustomerMessage       = oo.CustomerMessage,
                        CreateDate            = DateTime.Now,
                        SalesType             = (int)Hyt.Model.WorkflowStatus.OrderStatus.销售方式.普通订单
                    };
                    if (oo.Invoice != null)
                    {
                        neworder.Invoice = new FnInvoice()
                        {
                            InvoiceTypeSysNo = oo.Invoice.InvoiceTypeSysNo,
                            InvoiceTitle     = oo.Invoice.InvoiceTitle,
                            InvoiceRemarks   = oo.Invoice.InvoiceRemarks
                        };
                    }
                    #endregion

                    var cr = Hyt.BLL.CRM.CrCustomerBo.Instance.GetModel(order.Order.CustomerSysNo);//客户信息
                    if (cr != null)
                    {
                        levelSysNo = cr.LevelSysNo;               //客户等级
                        neworder.SoOrder.LevelSysNo = levelSysNo; //下单时候的客户等级
                    }
                }
                if (order.OrderItems != null)
                {
                    #region 订单明细
                    decimal amount = 0;
                    neworder.Products = new List <SoOrderItem>();
                    foreach (var p in order.OrderItems)
                    {
                        if (!CheckTwoSalePrice(p.SysNo, p.Price))
                        {
                            throw new HytException(string.Format("商品({0})销售价格不允许少于限定价格{1}.", p.ProductName, p.Price));
                        }
                        var pitem = new SoOrderItem()
                        {
                            Quantity         = p.Quantity,
                            ProductSysNo     = p.SysNo,
                            OriginalPrice    = p.Price,
                            SalesUnitPrice   = p.Price,
                            ProductName      = p.ProductName,
                            ProductSalesType = (int)CustomerStatus.商品销售类型.普通,
                            SalesAmount      = p.Price * p.Quantity,
                        };
                        if (levelSysNo > 0)
                        {
                            var originalPrice = GetProductPriceByCustomerLevel(pitem.ProductSysNo, levelSysNo); //商城原单价
                            pitem.OriginalPrice  = originalPrice > 0 ? originalPrice : p.Price;                 //商城原单价
                            pitem.SalesUnitPrice = originalPrice > 0 ? originalPrice : p.Price;                 //商城销售单价;
                            pitem.SalesAmount    = pitem.SalesUnitPrice * pitem.Quantity;                       //销售总额
                            pitem.ChangeAmount   = p.Price * p.Quantity - pitem.SalesAmount;                    //调价金额
                            if (originalPrice != p.Price && neworder.SoOrder != null)
                            {
                                neworder.SoOrder.ImgFlag = MallTypeFlag.二次销售并调价;
                            }
                        }
                        neworder.Products.Add(pitem);
                        amount += pitem.SalesAmount;
                    }
                    if (neworder.SoOrder != null)
                    {
                        neworder.SoOrder.ProductAmount       = neworder.SoOrder.OrderAmount = neworder.Products.Sum(m => m.SalesAmount); //总金额
                        neworder.SoOrder.ProductChangeAmount = neworder.Products.Sum(m => m.ChangeAmount);                               //调价金额
                        neworder.SoOrder.CashPay             = neworder.SoOrder.OrderAmount + neworder.SoOrder.ProductChangeAmount;      //支付金额
                    }
                    #endregion
                }
            }
            return(neworder);
        }