/// <summary>
        /// Get Product Object and Put it into Session.SessionKeys.Product
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns></returns>
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            string dnsn = CurrentSession.GetValue(Session.SessionKeys.DeliveryNo) as string;
            string palletNo = CurrentSession.GetValue(Session.SessionKeys.PalletNo) as string;

            IDeliveryRepository deliveryRep = RepositoryFactory.GetInstance().GetRepository<IDeliveryRepository, Delivery>();

            int condDeviceQty = 0;
            bool isAllStatus1 = true;
            IList<DeliveryPalletInfo> lstPallets = deliveryRep.GetDeliveryPalletListByDN(dnsn);
            foreach (DeliveryPalletInfo p in lstPallets)
            {
                if (palletNo.Equals(p.palletNo))
                {
                    condDeviceQty = p.deviceQty;
                }
                else
                {
                    if ("0".Equals(p.status))
                    {
                        isAllStatus1 = false;
                    }
                }
            }

            DeliveryPalletInfo dpiCond = new DeliveryPalletInfo(), dpiNew = new DeliveryPalletInfo();
            dpiCond.deliveryNo = dnsn;
            dpiCond.palletNo = palletNo;
            dpiCond.deviceQty = condDeviceQty;

            dpiNew.deliveryNo = dnsn;
            dpiNew.palletNo = palletNo;
            dpiNew.deviceQty = condDeviceQty;
            dpiNew.status = "1";
            dpiNew.editor = this.Editor;
            deliveryRep.UpdateDeliveryPalletInfoDefered(CurrentSession.UnitOfWork, dpiNew, dpiCond);

            if (isAllStatus1)
            {
            //    deliveryRep.UpdateDeliveryStatusDefered(CurrentSession.UnitOfWork, dnsn, "88");
            }

            return base.DoExecute(executionContext);
        }        
Example #2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="executionContext"></param>
        /// <returns></returns>
        protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext)
        {
            IProductRepository productRepository = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>();
            IDeliveryRepository deliveryRepository = RepositoryFactory.GetInstance().GetRepository<IDeliveryRepository, Delivery>();
            IPalletRepository palletRepository = RepositoryFactory.GetInstance().GetRepository<IPalletRepository, Pallet>();
            IList<Delivery> deliveryList = CurrentSession.GetValue("DeliveryList") as IList<Delivery>;
            IList<Pallet> palletList = CurrentSession.GetValue("PalletList") as IList<Pallet>;
            IList<DeliveryPalletInfo> dpList = CurrentSession.GetValue("DeliveryPalletList") as IList<DeliveryPalletInfo>;

            foreach (Delivery ele in deliveryList)
            {
                Delivery item = deliveryRepository.Find(ele.DeliveryNo);
                if (null != item)
                {
                    item.Editor = Editor;
                    foreach (DeliveryInfo info in ele.DeliveryInfoes)
                    {
                        item.SetExtendedProperty(info.InfoType, info.InfoValue, info.Editor);
                    }
                    deliveryRepository.Update(item, CurrentSession.UnitOfWork);
                }
                else
                {
                    deliveryRepository.Add(ele, CurrentSession.UnitOfWork);
                }
            }

            //<UC:2.18>若导入的Pallet存在于数据库中,则删除这个Pallet后再次导入
            foreach (Pallet ele in palletList)
            {
                Pallet item = palletRepository.Find(ele.PalletNo);
                if (null != item)
                {
                    item.Editor = Editor;
                    palletRepository.Update(item, CurrentSession.UnitOfWork);
                }
                else
                {
                    palletRepository.Add(ele, CurrentSession.UnitOfWork);
                }
            }

            foreach (DeliveryPalletInfo ele in dpList)
            {
                if (deliveryRepository.GetDeliveryPalletListByDN(ele.deliveryNo, ele.palletNo).Count > 0)
                {
                    DeliveryPalletInfo cond = new DeliveryPalletInfo();
                    cond.deliveryNo = ele.deliveryNo;
                    cond.palletNo = ele.palletNo;
                    DeliveryPalletInfo item = new DeliveryPalletInfo();
                    item.editor = Editor;
                    item.udt = DateTime.Now;
                    deliveryRepository.UpdateDeliveryPalletInfoDefered(CurrentSession.UnitOfWork, item, cond);
                }
                else
                {
                    deliveryRepository.InsertDeliveryPalletDefered(CurrentSession.UnitOfWork, ele);
                }
            }

            //<UC:2.20>本次导入的Model 以'PO'和'PF'(2012-09-27)开头的Delivery,需要同步上传信息到整机数据库,如果在整机的数据库中的Delivery/DeliveryInfo/Delivery_Pallet/Pallet 表中存在,则需要将整机的数据库中的Delivery/DeliveryInfo/Delivery_Pallet/Pallet 表中的对应记录删除后再上传
            IList<Delivery> PODeliveryList = new List<Delivery>();
            IList<Pallet> POPltList = new List<Pallet>();
            IList<DeliveryPalletInfo> PODPList = new List<DeliveryPalletInfo>();
            IList<string> PODNList = new List<string>();
            IList<string> POPNList = new List<string>();
            //Find all DN records whose Model property starts with "PO"
            foreach (Delivery ele in deliveryList)
            {
                //Mantis0001695: Final Scan需增加check前一站是否有刷入,新增172及60 開頭機型
                if (ele.ModelName.StartsWith("PO") || 
                    ele.ModelName.StartsWith("PF") || 
                    ele.ModelName.StartsWith("172") || 
                    ele.ModelName.StartsWith("60"))
                {
                    PODeliveryList.Add(ele);
                    PODNList.Add(ele.DeliveryNo);
                }
            }
            //Find their related Delivery_Pallet records and PalletNo
            foreach (DeliveryPalletInfo ele in dpList)
            {
                if (PODNList.Contains(ele.deliveryNo))
                {
                    PODPList.Add(ele);
                    POPNList.Add(ele.palletNo);
                }
            }
            //Find their related Pallet records
            foreach (Pallet ele in palletList)
            {
                if (POPNList.Contains(ele.PalletNo))
                {
                    POPltList.Add(ele);
                }
            }

            /*
            * Answer to: ITC-1414-0176
            * Description: 导入的Model 以'PO'开头的Delivery,需要同步上传信息到整机数据库
            */
            if (PODNList.Count > 0)
            {
                //Call SP:Docking_ConnectPCDB to connect to PC database.
                //SP in-args:
                //  none.
                //productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                //                                           "Docking_ConnectPCDB");

                foreach (Delivery ele in PODeliveryList)
                {
                    //Call SP:Docking_DeleteDeliveryOfPC to do following:
                    //delete from Delivery_Pallet where DeliveryNo=...
                    //delete from DeliveryInfo where DeliveryNo=...
                    //delete from Delivery where DeliveryNo=...
                    //SP in-args:
                    //  @DeliveryNo varchar(20)
                    //productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                    //                                           "Docking_DeleteDeliveryOfPC",
                    //                                           new SqlParameter("DeliveryNo", ele.DeliveryNo));

                    //Call SP:Docking_AddDeliveryOfPC to insert a Delivery record.
                    //SP in-args:
                    //  @DeliveryNo char(20)
                    //  @ShipmentNo char(20)
                    //  @PoNo char(20)
                    //  @Model varchar(20)
                    //  @ShipDate datetime
                    //  @Qty int
                    //  @Status char(2)
                    //  @Editor varchar(30)
                    productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                                                               "Docking_AddDeliveryOfPC",
                                                               new SqlParameter("DeliveryNo", ele.DeliveryNo),
                                                               new SqlParameter("ShipmentNo", ele.ShipmentNo),
                                                               new SqlParameter("PoNo", ele.PoNo),
                                                               new SqlParameter("Model", ele.ModelName),
                                                               new SqlParameter("ShipDate", ele.ShipDate),
                                                               new SqlParameter("Qty", ele.Qty),
                                                               new SqlParameter("Status", ele.Status),
                                                               new SqlParameter("Editor", ele.Editor));

                    foreach (DeliveryInfo info in ele.DeliveryInfoes)
                    {
                        //Call SP:Docking_AddDeliveryInfoOfPC to insert a DeliveryInfo record.
                        //SP in-args:
                        //  @DeliveryNo char(20)
                        //  @InfoType char(20)
                        //  @InfoValue nvarchar(200)
                        //  @Editor varchar(30)
                        productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                                                                   "Docking_AddDeliveryInfoOfPC",
                                                                   new SqlParameter("DeliveryNo", ele.DeliveryNo),
                                                                   new SqlParameter("InfoType", info.InfoType),
                                                                   new SqlParameter("InfoValue", info.InfoValue),
                                                                   new SqlParameter("Editor", info.Editor));
                    }
                }
                foreach (Pallet ele in POPltList)
                {
                    //Call SP:Docking_DeletePalletOfPC to do following:
                    //delete from Delivery_Pallet where PalletNo=...
                    //delete from Pallet where PalletNo=...
                    //SP in-args:
                    //  @PalletNo varchar(20)
                    //productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                    //                                           "Docking_DeletePalletOfPC",
                    //                                           new SqlParameter("PalletNo", ele.PalletNo));

                    //Call SP:Docking_AddPalletOfPC to insert a Pallet record.
                    //SP in-args:
                    //  @PalletNo char(20)
                    //  @UCC char(30)
                    //  @Station char(10)
                    //  @Weight decimal(10,2)
                    //  @PalletModel char(10)
                    //  @Length decimal(10,2)
                    //  @Width decimal(10,2)
                    //  @Height decimal(10,2)
                    //  @Editor varchar(30)
                    //  @Weight_L decimal(10,2)
                    productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                                                               "Docking_AddPalletOfPC",
                                                               new SqlParameter("PalletNo", ele.PalletNo),
                                                               new SqlParameter("UCC", ele.UCC),
                                                               new SqlParameter("Station", ele.Station),
                                                               new SqlParameter("Weight", ele.Weight),
                        //Mantis0001695: Final Scan需增加check前一站是否有刷入,新增區別Docking 使用棧板
                                                               new SqlParameter("PalletModel", "Docking"),
                                                               //new SqlParameter("PalletModel", ele.PalletModel),
                                                               new SqlParameter("Length", ele.Length),
                                                               new SqlParameter("Width", ele.Width),
                                                               new SqlParameter("Height", ele.Height),
                                                               new SqlParameter("Editor", ele.Editor),
                                                               new SqlParameter("Weight_L", ele.Weight_L));
                }
                foreach (DeliveryPalletInfo ele in PODPList)
                {
                    //Call SP:Docking_AddDeliveryPalletOfPC to insert a Delivery_Pallet record.
                    //SP in-args:
                    //  @DeliveryNo char(20)
                    //  @PalletNo char(20)
                    //  @ShipmentNo char(20)
                    //  @DeliveryQty smallint
                    //  @Status char(1)
                    //  @Editor varchar(30)
                    //  @PalletType varchar(8)
                    //  @DeviceQty int
                    productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                                                               "Docking_AddDeliveryPalletOfPC",
                                                               new SqlParameter("DeliveryNo", ele.deliveryNo),
                                                               new SqlParameter("PalletNo", ele.palletNo),
                                                               new SqlParameter("ShipmentNo", ele.shipmentNo),
                                                               new SqlParameter("DeliveryQty", ele.deliveryQty),
                                                               new SqlParameter("Status", ele.status),
                                                               new SqlParameter("Editor", ele.editor),
                                                               new SqlParameter("PalletType", ele.palletType),
                                                               new SqlParameter("DeviceQty", ele.deviceQty));
                }

                //Call SP:Docking_DisconnectPCDB to disconnect from PC database.
                //SP in-args:
                //  none.
                //productRepository.ExecSpForNonQuery(SqlHelper.ConnectionString_PAK,
                //                                           "Docking_DisconnectPCDB");
            }

            return base.DoExecute(executionContext);
        }
Example #3
0
        /// <summary>
        ///  Get DeliveryInfo to set DeliveryEx
        /// </summary>   

        private DeliveryEx SetDeliveryEx(string deliveryNo, int qty, IList<DeliveryInfo> infoList, DeliveryPalletInfo deliveryPallet)
        {
            DeliveryEx item = new DeliveryEx();
            item.DeliveryNo = deliveryNo;
            int DNCount =0;
            int cnQty = 0;

            string cqty = infoList.Where(x => x.InfoType == "CQty").Select(y => y.InfoValue).FirstOrDefault();
            if (!string.IsNullOrEmpty(cqty))
            {
                item.QtyPerCarton = (int)double.Parse(cqty);
            }
            
            foreach (DeliveryInfo info in infoList)
            {
                 //if  (string.IsNullOrEmpty(info.InfoValue))
                 //{
                 //    continue;
                 //}
                switch (info.InfoType)
                {
                    case "Consolidated":                       
                        string[] s = info.InfoValue.Split(new char[] { '/' });
                        item.ShipmentNo = s[0].Trim();
                        item.ConsolidateQty = int.Parse(s[1].Trim()); 
                        break;  
                    case "PackingType":
                        item.ShipType = info.InfoValue;
                         break;
                    //case "CQty":
                    case "CnQty":
                         cnQty = (int)double.Parse(info.InfoValue);
                         if (cnQty > 0)
                         {
                             item.QtyPerCarton = cnQty;
                         }
                        break;                               
                    case "RegId":
                        item.MessageCode = info.InfoValue;
                        break;                   
                    case "ShipToParty":
                        item.ShipToParty = info.InfoValue.Substring(info.InfoValue.IndexOf("-") + 1).Trim();
                        break;
                    case "GroupId":
                        item.GroupId = info.InfoValue;
                        break;
                    case "Priority":
                        item.Priority = info.InfoValue;
                        break;
                    case "Flag":
                        item.OrderType= info.InfoValue;
                        break;
                    case "BOL":
                        item.BOL= info.InfoValue;
                        break;
                    case "EmeaCarrier":
                        item.HAWB = info.InfoValue;
                        break;
                    case "Carrier":
                        item.Carrier = info.InfoValue;
                        break;
                    case "ShipWay":
                        item.ShipWay = info.InfoValue;
                        break;
                    case "Invoice":
                        item.PackID= info.InfoValue;
                        break;
                     case "InvoiceNum":
                         DNCount=int.Parse( info.InfoValue);
                        break;
                    case "Invoice_NO":
                        DNCount = int.Parse(info.InfoValue);
                        break;
                    case "PalletQty":
                        string[] data = info.InfoValue.Split('.');
                        item.StdPltFullQty = data[0].Trim();
                        if (data.Length>1)
                        {
                            item.StdPltStackType = data[1].Trim();
                         }
                        break;
    
                }
            }

            if (string.IsNullOrEmpty(item.ShipmentNo))
            {
                item.ShipmentNo = deliveryNo.Substring(0, 10);
                item.ConsolidateQty = DNCount;
            }

            if (item.QtyPerCarton > 0)
            {
                item.CartonQty = qty % item.QtyPerCarton == 0 ? (qty / item.QtyPerCarton) : (qty / item.QtyPerCarton) + 1;
            }

            item.PalletType = deliveryPallet.palletNo.Substring(0, 2) == "NA" ? "C" : "P";

            item.Editor = this.Editor;

            return item;
        }