예제 #1
0
        /// <summary>
        ///     插入新订单行
        /// </summary>
        /// <param name="order">订单</param>
        /// <param name="dto">订单DTO</param>
        /// <param name="line">订单行DTO</param>
        /// <param name="importType">引进方式</param>
        /// <param name="supplierId">供应商ID</param>
        private void InsertOrderLine(AircraftPurchaseOrder order, AircraftPurchaseOrderDTO dto,
            AircraftPurchaseOrderLineDTO line, ActionCategory importType, int supplierId)
        {
            // 获取飞机物料机型
            var material =
                _materialRepository.GetFiltered(m => m.Id == line.AircraftMaterialId)
                    .OfType<AircraftMaterial>()
                    .FirstOrDefault();
            if (material == null)
            {
                throw new ArgumentException("未能获取飞机物料!");
            }
            var aircraftTypeId = material.AircraftTypeId;

            // 添加订单行
            var orderLine = order.AddNewAircraftPurchaseOrderLine(line.UnitPrice, line.Amount,
                line.Discount,
                line.EstimateDeliveryDate);
            orderLine.SetCost(line.AirframePrice, line.RefitCost, line.EnginePrice);
            orderLine.SetAircraftMaterial(line.AircraftMaterialId);

            // 创建或引用合同飞机
            var persist = _contractAircraftRepository.Get(line.ContractAircraftId) as PurchaseContractAircraft;
            var contractAircraft = ContractAircraftFactory.CreatePurchaseContractAircraft(dto.Name, line.RankNumber);
            contractAircraft.ChangeCurrentIdentity(line.ContractAircraftId);
            contractAircraft.SetAircraftType(aircraftTypeId);
            contractAircraft.SetImportCategory(importType);
            contractAircraft.SetCSCNumber(line.CSCNumber);
            contractAircraft.SetSerialNumber(line.SerialNumber);
            contractAircraft.SetSupplier(supplierId);
            contractAircraft.SetPlanAircraft(line.PlanAircraftID);
            if (persist == null)
            {
                orderLine.SetContractAircraft(contractAircraft);
            }
            else
            {
                orderLine.SetContractAircraft(persist);
                _contractAircraftRepository.Merge(persist, contractAircraft);
            }
        }
예제 #2
0
        public void InsertAircraftPurchaseOrder(AircraftPurchaseOrderDTO dto)
        {
            if (dto == null)
            {
                throw new ArgumentException("参数为空!");
            }

            // 获取版本号
            var id = dto.TradeId;
            var version = _orderRepository.GetFiltered(o => o.TradeId == id).Count() + 1;

            var date = DateTime.Now.Date;
            var seq = _orderRepository.GetFiltered(t => t.CreateDate > date).Count() + 1;

            // 创建订单
            var order = OrderFactory.CreateAircraftPurchaseOrder(version, dto.OperatorName,
                dto.OrderDate);
            order.SetTrade(dto.TradeId);
            order.SetCurrency(dto.CurrencyId);
            order.SetContractNumber(seq);
            order.SetLinkman(dto.LinkmanId);
            order.SetSourceGuid(dto.SourceGuid);
            order.SetName(dto.Name);
            order.SetOrderStatus((OrderStatus) dto.Status);
            if (!string.IsNullOrWhiteSpace(dto.LogWriter))
            {
                order.SetNote(dto.LogWriter);
            }
            if (dto.ContractDocGuid != Guid.Empty)
            {
                order.SetContractDoc(dto.ContractDocGuid, dto.ContractName);
            }

            // 获取引进方式
            var importType =
                _actionCategoryRepository.GetFiltered(a => a.ActionType == "引进" && a.ActionName == "购买")
                    .FirstOrDefault();

            // 处理订单行
            dto.AircraftPurchaseOrderLines.ToList()
                .ForEach(line => InsertOrderLine(order, dto, line, importType, dto.SupplierId));

            // 处理分解合同
            dto.ContractContents.ToList().ForEach(c => InsertContractContent(order, c));

            _orderRepository.Add(order);
        }
예제 #3
0
        public void UpdateAircraftPurchaseOrder(AircraftPurchaseOrderDTO dto)
        {
            if (dto == null)
            {
                throw new ArgumentException("参数为空!");
            }

            var order = _orderRepository.Get(dto.Id) as AircraftPurchaseOrder;
            if (order != null)
            {
                // 更新当前记录
                order.SetCurrency(dto.CurrencyId);
                order.SetLinkman(dto.LinkmanId);
                order.SetName(dto.Name);
                order.SetOperatorName(dto.OperatorName);
                order.SetOrderStatus((OrderStatus) dto.Status);
                if (!string.IsNullOrWhiteSpace(dto.LogWriter))
                {
                    order.SetNote(dto.LogWriter);
                }
                if (dto.ContractDocGuid != Guid.Empty)
                {
                    order.SetContractDoc(dto.ContractDocGuid, dto.ContractName);
                }

                // 获取引进方式
                var importType =
                    _actionCategoryRepository.GetFiltered(a => a.ActionType == "引进" && a.ActionName == "购买")
                        .FirstOrDefault();

                var trade = _tradeRepository.Get(order.TradeId);

                // 处理订单行
                var dtoOrderLines = dto.AircraftPurchaseOrderLines;
                var orderLines = order.OrderLines;
                DataHelper.DetailHandle(dtoOrderLines.ToArray(),
                    orderLines.OfType<AircraftPurchaseOrderLine>().ToArray(),
                    c => c.Id, p => p.Id,
                    i => InsertOrderLine(order, dto, i, importType, trade.SupplierId),
                    UpdateOrderLine,
                    d => _orderRepository.RemoveOrderLine(d));

                // 处理分解合同
                var dtoContents = dto.ContractContents;
                var contents = order.ContractContents;
                DataHelper.DetailHandle(dtoContents.ToArray(), contents.ToArray(),
                    c => c.Id, p => p.Id,
                    i => InsertContractContent(order, i),
                    UpdateContractContent,
                    d => _orderRepository.RemoveContractContent(d));
            }
        }
예제 #4
0
        public void DeleteAircraftPurchaseOrder(AircraftPurchaseOrderDTO dto)
        {
            if (dto == null)
            {
                throw new ArgumentException("参数为空!");
            }

            var deleteAircraftPurchaseOrder = _orderRepository.Get(dto.Id);
            if (deleteAircraftPurchaseOrder != null)
            {
                _relatedDocRepository.GetFiltered(r => r.SourceId == deleteAircraftPurchaseOrder.SourceGuid)
                    .ToList()
                    .ForEach(r => _relatedDocRepository.Remove(r));
                _orderRepository.Remove(deleteAircraftPurchaseOrder);
            }
        }