示例#1
0
        private TransportOrderDetailViewModel BindTransportOrderDetailViewModel(TransportOrderDetail transportOrderDetail)
        {
            TransportOrderDetailViewModel transportOrderDetailViewModel = null;

            if (transportOrderDetail != null)
            {
                transportOrderDetailViewModel = new TransportOrderDetailViewModel
                {
                    FdpID           = transportOrderDetail.FdpID,
                    FDP             = transportOrderDetail.FDP.Name,
                    CommodityID     = transportOrderDetail.CommodityID,
                    Commodity       = transportOrderDetail.Commodity.Name,
                    DonorID         = transportOrderDetail.DonorID,
                    OriginWarehouse = transportOrderDetail.Hub.Name,
                    QuantityQtl     = transportOrderDetail.QuantityQtl,
                    RequisitionID   = transportOrderDetail.RequisitionID,
                    RequisitionNo   =
                        transportOrderDetail.ReliefRequisition.RequisitionNo,
                    SourceWarehouseID = transportOrderDetail.SourceWarehouseID,
                    TariffPerQtl      = transportOrderDetail.TariffPerQtl,
                    Woreda            = transportOrderDetail.FDP.AdminUnit.Name
                };
            }
            return(transportOrderDetailViewModel);
        }
示例#2
0
 public bool DeleteTransportOrderDetail(TransportOrderDetail transportOrderDetail)
 {
     if (transportOrderDetail == null)
     {
         return(false);
     }
     _unitOfWork.TransportOrderDetailRepository.Delete(transportOrderDetail);
     _unitOfWork.Save();
     return(true);
 }
示例#3
0
        private IList<TransportOrderDetail> PrepareTransportOrderDetail(string orderNo, TransportMode transportMode, bool multiSitePick, IList<string> ipNoList, IList<TransportOrderRoute> transportOrderRouteList)
        {
            IList<TransportOrderDetail> transportOrderDetailList = new List<TransportOrderDetail>();
            if (ipNoList != null && ipNoList.Count > 0)
            {
                StringBuilder selectIpMasterHql = null;
                StringBuilder selectIpDetailHql = null;
                StringBuilder selectItemHql = null;
                StringBuilder verifyIpNoHql = null;
                IList<object> parms = new List<object>();
                foreach (string ipNo in ipNoList)
                {
                    if (selectIpMasterHql == null)
                    {
                        selectIpMasterHql = new StringBuilder("from IpMaster where IpNo in (?");
                        selectIpDetailHql = new StringBuilder("from IpDetail where IpNo in (?");
                        selectItemHql = new StringBuilder("from Item where code in (select Item from IpDetail where IpNo in (?");
                        verifyIpNoHql = new StringBuilder("select IpNo from TransportOrderDetail where IpNo in (?");
                    }
                    else
                    {
                        selectIpMasterHql.Append(", ?");
                        selectIpDetailHql.Append(", ?");
                        selectItemHql.Append(", ?");
                        verifyIpNoHql.Append(", ?");
                    }

                    parms.Add(ipNo);
                }
                selectIpMasterHql.Append(")");
                selectIpDetailHql.Append(")");
                selectItemHql.Append("))");
                verifyIpNoHql.Append(")");

                IList<IpMaster> ipMasterList = genericMgr.FindAll<IpMaster>(selectIpMasterHql.ToString(), parms.ToArray());
                IList<IpDetail> ipDetailList = genericMgr.FindAll<IpDetail>(selectIpDetailHql.ToString(), parms.ToArray());
                IList<Item> itemList = genericMgr.FindAll<Item>(selectItemHql.ToString(), parms.ToArray());
                IList<string> createdIpNoList = genericMgr.FindAll<string>(verifyIpNoHql.ToString(), parms.ToArray());

                if (createdIpNoList.Count > 0)
                {
                    throw new BusinessException("ASN号{0}已经创建了运输单。", String.Join(", ", createdIpNoList.ToArray()));
                }

                int seq = 1;
                foreach (string ipNo in ipNoList)
                {
                    IpMaster ipMaster = ipMasterList.Where(m => m.IpNo == ipNo).SingleOrDefault();
                    if (ipMaster == null)
                    {
                        throw new BusinessException("ASN号{0}不存在。", ipNo);
                    }

                    if (ipMaster.Status != IpStatus.Submit)
                    {
                        throw new BusinessException("ASN号{0}状态不是{1}不能添加至运输单。", ipNo, systemMgr.GetCodeDetailDescription(com.Sconit.CodeMaster.CodeMaster.IpStatus, ((int)IpStatus.Submit)).ToString());
                    }

                    TransportOrderRoute transportOrderRouteFrom =
                        transportOrderRouteList.Where(r => r.ShipAddress == ipMaster.ShipFrom && !r.IsArrive).OrderBy(r => r.Sequence).FirstOrDefault();

                    if (!multiSitePick && transportOrderRouteFrom.Sequence != 1)
                    {
                        throw new BusinessException("ASN号{0}发货地址不是运输单的始发站点。", ipNo);
                    }

                    if (transportOrderRouteFrom == null)
                    {
                        throw new BusinessException("ASN号{0}发货地址不是运输单经过的站点。", ipNo);
                    }

                    TransportOrderRoute transportOrderRouteTo =
                       transportOrderRouteList.Where(r => r.ShipAddress == ipMaster.ShipTo && !r.IsArrive && r.Sequence > transportOrderRouteFrom.Sequence).OrderBy(r => r.Sequence).FirstOrDefault();

                    if (transportOrderRouteTo == null)
                    {
                        throw new BusinessException("ASN号{0}收货地址不是运输单经过的站点。", ipNo);
                    }

                    TransportOrderDetail transportOrderDetail = new TransportOrderDetail();
                    transportOrderDetail.OrderNo = orderNo;
                    transportOrderDetail.Sequence = seq++;
                    transportOrderDetail.IpNo = ipNo;
                    transportOrderDetail.OrderRouteFrom = transportOrderRouteFrom.Id;
                    transportOrderDetail.OrderRouteTo = transportOrderRouteTo.Id;
                    transportOrderDetail.EstPalletQty = Convert.ToInt32(Math.Ceiling(ipDetailList.Sum(
                        d => (d.PalletLotSize > 0 ? (d.Qty / d.PalletLotSize) : ((itemList.Where(i => i.Code == d.Item).Single().PalletLotSize > 0 ? (d.Qty / itemList.Where(i => i.Code == d.Item).Single().PalletLotSize) : 0))))));
                    transportOrderDetail.EstVolume = ipDetailList.Sum(
                        d => (d.UnitCount > 0 ? (d.Qty / d.UnitCount) : ((itemList.Where(i => i.Code == d.Item).Single().UnitCount > 0 ? (d.Qty / itemList.Where(i => i.Code == d.Item).Single().UnitCount) : 0))) * d.PackageVolume);
                    transportOrderDetail.EstVolume = ipDetailList.Sum(
                        d => (d.UnitCount > 0 ? (d.Qty / d.UnitCount) : ((itemList.Where(i => i.Code == d.Item).Single().UnitCount > 0 ? (d.Qty / itemList.Where(i => i.Code == d.Item).Single().UnitCount) : 0))) * d.PackageWeight);
                    transportOrderDetail.EstBoxCount = Convert.ToInt32(ipDetailList.Sum(
                        d => Math.Ceiling((d.UnitCount > 0 ? (d.Qty / d.UnitCount) : ((itemList.Where(i => i.Code == d.Item).Single().UnitCount > 0 ? (d.Qty / itemList.Where(i => i.Code == d.Item).Single().UnitCount) : 0))))));
                    transportOrderDetail.LoadTime = DateTime.Now;
                    transportOrderDetail.PartyFrom = ipMaster.PartyFrom;
                    transportOrderDetail.PartyFromName = ipMaster.PartyFromName;
                    transportOrderDetail.PartyTo = ipMaster.PartyTo;
                    transportOrderDetail.PartyToName = ipMaster.PartyToName;
                    transportOrderDetail.ShipFrom = ipMaster.ShipFrom;
                    transportOrderDetail.ShipFromAddress = ipMaster.ShipFromAddress;
                    transportOrderDetail.ShipFromTel = ipMaster.ShipFromTel;
                    transportOrderDetail.ShipFromCell = ipMaster.ShipFromCell;
                    transportOrderDetail.ShipFromFax = ipMaster.ShipFromFax;
                    transportOrderDetail.ShipFromContact = ipMaster.ShipFromContact;
                    transportOrderDetail.ShipTo = ipMaster.ShipTo;
                    transportOrderDetail.ShipToAddress = ipMaster.ShipToAddress;
                    transportOrderDetail.ShipToTel = ipMaster.ShipToTel;
                    transportOrderDetail.ShipToCell = ipMaster.ShipToCell;
                    transportOrderDetail.ShipToFax = ipMaster.ShipToFax;
                    transportOrderDetail.ShipToContact = ipMaster.ShipToContact;
                    transportOrderDetail.Dock = ipMaster.Dock;
                    transportOrderDetail.Distance =
                        CalculateShipDistance(transportOrderDetail.ShipFrom, transportOrderDetail.ShipTo, transportMode);
                    transportOrderDetail.IsReceived = false;

                    transportOrderDetailList.Add(transportOrderDetail);
                }
            }

            return transportOrderDetailList;
        }
示例#4
0
 public void PrepareTransportOrderDetail(TransportOrderDetail transportOrderDetail)
 {
     #region 计算体积和重量
     IList<IpDetail> ipDetailList = genericMgr.FindAll<IpDetail>("from IpDetail where IpNo = ?", transportOrderDetail.IpNo);
     decimal totalPackageVolume = ipDetailList.Sum(p => p.PackageVolume * p.Qty / p.UnitCount);
     decimal totalPackageWeight = ipDetailList.Sum(p => p.PackageWeight * p.Qty / p.UnitCount);
     transportOrderDetail.Volume = totalPackageVolume;
     transportOrderDetail.Weight = totalPackageWeight;
     #endregion
 }
示例#5
0
        public ActionResult ChangeTransporters([DataSourceRequest] DataSourceRequest request, List <SubstituteTransporterOrder> listOfSubTransporterOrders, int changedTransportOrderID)
        {
            var changedTransportOrderObj = _transportOrderService.FindById(changedTransportOrderID);
            var returnedObj = new List <TransportOrder>();

            foreach (var subTransporterOrders in listOfSubTransporterOrders)
            {
                var transporterCount = subTransporterOrders.TransportersStandingList.Count();

                foreach (var transporter in subTransporterOrders.TransportersStandingList)
                {
                    changedTransportOrderObj = _transportOrderService.FindById(changedTransportOrderID);
                    var transporterObj = _transporterService.FindById(transporter.TransporterID);
                    var transportOrder =
                        _transportOrderService.Get(t => t.TransporterID == transporterObj.TransporterID &&
                                                   t.StatusID == (int)TransportOrderStatus.Draft).
                        FirstOrDefault();
                    if (transportOrder != null)
                    {
                        foreach (var transportOrderDetail in changedTransportOrderObj.TransportOrderDetails.ToList())
                        {
                            if (transportOrderDetail.FDP.AdminUnitID == subTransporterOrders.WoredaID)
                            {
                                var transportOrderDetailObj = new TransportOrderDetail
                                {
                                    CommodityID       = transportOrderDetail.CommodityID,
                                    FdpID             = transportOrderDetail.FdpID,
                                    RequisitionID     = transportOrderDetail.RequisitionID,
                                    QuantityQtl       = transportOrderDetail.QuantityQtl.ToPreferedWeightUnit() / transporterCount,
                                    TariffPerQtl      = transportOrderDetail.TariffPerQtl,
                                    SourceWarehouseID = transportOrderDetail.Hub.HubID,
                                    //transportOrderDetailObj.ZoneID = transportOrderDetail.ReliefRequisition.ZoneID;
                                };
                                transportOrder.TransportOrderDetails.Add(transportOrderDetailObj);
                                _transportOrderService.EditTransportOrder(transportOrder);
                            }
                        }

                        returnedObj.Add(transportOrder);
                    }
                    else
                    {
                        var transportOrderObj = new TransportOrder
                        {
                            TransporterID            = transporter.TransporterID,
                            OrderDate                = DateTime.Today,
                            TransportOrderNo         = Guid.NewGuid().ToString(),
                            OrderExpiryDate          = DateTime.Today.AddDays(10),
                            BidDocumentNo            = "BID-DOC-No",
                            PerformanceBondReceiptNo = "PERFORMANCE-BOND-NO",
                            ContractNumber           = Guid.NewGuid().ToString(),
                            TransporterSignedDate    = DateTime.Today,
                            RequestedDispatchDate    = DateTime.Today,
                            ConsignerDate            = DateTime.Today,
                            StatusID  = (int)TransportOrderStatus.Draft,
                            StartDate = DateTime.Today,
                            EndDate   = DateTime.Today.AddDays(10),
                        };
                        _transportOrderService.AddTransportOrder(transportOrderObj);
                        var transporterName = _transporterService.FindById(transportOrderObj.TransporterID).Name;
                        transportOrderObj.TransportOrderNo = string.Format("TRN-ORD-{0}", transportOrderObj.TransportOrderID);
                        transportOrderObj.ContractNumber   = string.Format("{0}/{1}/{2}/{3}", "LTCD", DateTime.Today.Day, DateTime.Today.Year, transporterName.Substring(0, 2));
                        _transportOrderService.EditTransportOrder(transportOrderObj);
                        //var transportOrderDetailList = subTransporterOrders.TransportOrderDetails;
                        foreach (var transportOrderDetail in changedTransportOrderObj.TransportOrderDetails.ToList())
                        {
                            if (transportOrderDetail.FDP.AdminUnitID == subTransporterOrders.WoredaID)
                            {
                                var transportOrderDetailObj = new TransportOrderDetail
                                {
                                    TransportOrderID = transportOrderObj.TransportOrderID,
                                    CommodityID      = transportOrderDetail.CommodityID,
                                    FdpID            = transportOrderDetail.FdpID,
                                    RequisitionID    = transportOrderDetail.RequisitionID,
                                    QuantityQtl      =
                                        transportOrderDetail.QuantityQtl.ToPreferedWeightUnit() / transporterCount,
                                    TariffPerQtl      = transportOrderDetail.TariffPerQtl,
                                    SourceWarehouseID = transportOrderDetail.Hub.HubID
                                };
                                //transportOrderDetail.ZoneID = reliefRequisitionDetail.ReliefRequisition.ZoneID;
                                _transportOrderDetailService.AddTransportOrderDetail(transportOrderDetailObj);
                            }
                        }

                        returnedObj.Add(transportOrderObj);
                    }
                }
            }
            changedTransportOrderObj.StatusID = (int)TransportOrderStatus.Failed;
            _transportOrderService.EditTransportOrder(changedTransportOrderObj);
            return(RedirectToAction("Index", "TransportOrder", returnedObj));
            //return Json(returnedObj.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
        }
示例#6
0
 public bool EditTransportOrderDetail(TransportOrderDetail transportOrderDetail)
 {
     _unitOfWork.TransportOrderDetailRepository.Edit(transportOrderDetail);
     _unitOfWork.Save();
     return(true);
 }