Exemple #1
0
        private static List <Item> GetSourceItems(OracleConnection conn, string schemeName)
        {
            List <Item> output = new List <Item>();
            string      sql    = "SELECT * FROM WV_BOQ_DATA WHERE SCHEME_NAME='" + schemeName + "'";

            using (OracleDataReader dr = UtilityDb2.GetDataReader(sql, conn))
            {
                while (dr.Read())
                {
                    Item item = new Item();
                    item.ContractNo = dr["CONTRACT_NO"].ToString();
                    item.ItemNo     = dr["ITEM_NO"].ToString();
                    item.Quantity   = Convert.ToSingle(dr["PU_QTY"]);

                    string isposp = dr["ISP_OSP"].ToString();
                    if (isposp.ToUpper() == "ISP")
                    {
                        item.CotRt = "COT";
                    }
                    else if (isposp.ToUpper() == "OSP")
                    {
                        item.CotRt = "RT";
                    }

                    output.Add(item);
                }
            }
            return(output);
        }
Exemple #2
0
        public bool GenerateBOQItems(string schemeName, OracleConnection conn, ref string errorMessage)
        {
            try
            {
                WebView.BOQNrmService.nrmboqClient svc = new WebView.BOQNrmService.nrmboqClient();

                string      errorCode    = "";
                string      errorDesc    = "";
                BOQItemList itemList     = svc.generateBOQItems(out errorCode, out errorDesc, schemeName);
                List <Item> expandedList = ExpandWebServiceItems(itemList);

                if (string.IsNullOrEmpty(errorCode)) // no errors
                {
                    // insert into db
                    string sql = "DELETE FROM WV_ISP_TEMP WHERE SCHEME_NAME='" + schemeName + "'";
                    UtilityDb2.ExecuteSql(sql, conn);
                    using (UtilityDb2 db = new UtilityDb2())
                    {
                        db.connection = conn;

                        db.PrepareInsert("WV_ISP_TEMP");
                        foreach (Item item in expandedList)
                        {
                            DataRow row = db.Insert(null);
                            row["SCHEME_NAME"] = item.schemeName;
                            row["CONTRACT_NO"] = item.contractNo;
                            row["ITEM_NO"]     = item.itemNo;

                            int quantity = 0;
                            if (int.TryParse(item.quantity, out quantity))
                            {
                                row["QUANTITY"] = quantity.ToString();
                            }

                            row["FEATURE_STATE"] = item.featureState;
                            db.Insert(row);
                        }
                        db.EndInsert();
                    }
                    return(true);
                }
                else
                {
                    errorMessage = errorCode + ": " + errorDesc;
                    return(true);
                }
            }
            catch (Exception ex)
            {
                errorMessage = "Exception: " + ex.Message;
                return(false);
            }
        }
Exemple #3
0
        private static List <Package> GetPackages(OracleConnection conn,
                                                  Item originalItem, string [] userSpecifiedPackages)
        {
            List <Package> packages = new List <Package>();

            // create packages according to the quantity of the item.
            for (int i = 0; i < originalItem.Quantity; i++)
            {
                Package package = new Package();
                package.OriginalItem = originalItem;
                packages.Add(package);
            }

            // find items for the packages
            bool   hasItems = false;
            string sql      = "SELECT * FROM WV_PACKAGE_MAST WHERE MANDATORY='Y' AND CONTRACT_NO='" +
                              originalItem.ContractNo + "' AND PACKAGE_ITEM_NO='" + originalItem.ItemNo + "'";

            using (OracleDataReader dr = UtilityDb2.GetDataReader(sql, conn))
            {
                while (dr.Read())
                {
                    hasItems = true;

                    foreach (Package package in packages)
                    {
                        Package.PackageItem specItem = new Package.PackageItem();
                        specItem.ItemNo     = dr["ITEM_NO"].ToString();
                        specItem.Quantity   = Convert.ToSingle(dr["ITEM_QTY"]);
                        specItem.Mandatory  = dr["MANDATORY"].ToString().ToUpper() == "Y";
                        specItem.CotRt      = dr["COT-RT"].ToString();
                        specItem.ItemType   = dr["TYPE"].ToString();
                        specItem.ContractNo = dr["CONTRACT_NO"].ToString();
                        package.SpecifiedItems.Add(specItem);
                    }
                }
            }

            // return the list of created packages if items were found
            // otherwise return null

            foreach (string strPackageItemNo in userSpecifiedPackages)
            {
                if (strPackageItemNo.Trim() == originalItem.ItemNo)
                {
                    return(packages);
                }
            }

            return(null);
        }
Exemple #4
0
        public static void Run(bool writeOutputFile,
                               OracleConnection conn,
                               string schemeName,
                               string packagesToCreate,
                               out List <Package> packages,
                               out List <Item> individualItems)
        {
            packages        = new List <Package>();
            individualItems = new List <Item>();

            List <Item> source = GetSourceItems(conn, schemeName);

            //List<Item> source = TestGetSourceItems(conn, schemeName);

            // copy source items into individual items
            foreach (Item item in source)
            {
                Item copyItem = item.Copy();
                individualItems.Add(copyItem);
            }

            // create packages, one package per contract number
            char[]   commaDelimiter                 = { ',' };
            string[] arPackagesToCreate             = packagesToCreate.Split(commaDelimiter);
            Dictionary <string, string> contractNos = new Dictionary <string, string>();

            foreach (Item item in source)
            {
                string contractNo = item.ContractNo;
                if (!contractNos.ContainsKey(contractNo))
                {
                    foreach (string packageItemNo in arPackagesToCreate)
                    {
                        CreateItem(individualItems, contractNo, packageItemNo, 1, "");
                    }
                    contractNos[contractNo] = "x"; // does not matter what you keep there. this is just to indicate that the contract has been catered for
                }
            }

            // extract packages out of the individualItems
            List <Item> toRemove = new List <Item>();

            foreach (Item item in individualItems)
            {
                List <Package> createdPackages = GetPackages(conn, item, arPackagesToCreate);
                if (createdPackages != null)
                {
                    packages.AddRange(createdPackages);
                    toRemove.Add(item);
                }
            }
            foreach (Item item in toRemove)
            {
                individualItems.Remove(item); // remove the items that have been identified as packages
            }
            // by this time, we have separated the items into packages and individual items
            // so, we assign the individual items into the packages
            foreach (Package package in packages)
            {
                if (package.CanBeFilled(individualItems))
                {
                    package.Fill(individualItems);
                }
            }

            // remove items that have been taken by the packages
            toRemove = new List <Item>();
            foreach (Item item in individualItems)
            {
                if (item.Quantity == 0)
                {
                    toRemove.Add(item);
                }
            }
            foreach (Item item in toRemove)
            {
                individualItems.Remove(item);
            }

            // remove incomplete packages from list
            List <Package> completePackages = new List <Package>();

            foreach (Package package in packages)
            {
                if (package.HasBeenFilled)
                {
                    completePackages.Add(package);
                }
            }
            packages = completePackages;

            //if (writeOutputFile)
            //    WriteOutput("Output.txt", source, packages, individualItems, packagesToCreate);

            // delete the source items from database
            string deletesql = "DELETE FROM WV_BOQ_DATA WHERE SCHEME_NAME='" + schemeName + "'";

            UtilityDb2.ExecuteSql(deletesql, conn);
        }