예제 #1
0
        private void BuildStoreInventoryList(int year, int storeId, DataTable dtItm)
        {
            string[] str = { "Item Name", "Batch No.", "Remark", "Unit Price" };
            foreach (string co in str)
            {
                dtBB.Columns.Add(co);
            }
            str = new string[] { "ItemId", "No.", "Beginning Balance", "Ending Balance(SOH)", "Physical Inventory", "ID", "RecID" };//, "Change Since Sene 30" };

            foreach (string co in str)
            {
                dtBB.Columns.Add(co, typeof(int));
            }
            int count    = 1;
            var yProcess = new YearEnd();
            var bal      = new Balance();

            dtDate.Value = DateTime.Now;
            DateTime dtCurent = new DateTime();

            dtDate.CustomFormat = "MM/dd/yyyy";
            dtCurent            = ConvertDate.DateConverter(dtDate.Text);

            var recDoc = new ReceiveDoc();
            int month  = dtCurent.Month - 1;

            var yEnd = new YearEnd();


            foreach (DataRow dr in dtItm.Rows)//For each item
            {
                string itemName      = dr["ItemName"].ToString() + " - " + dr["DosageForm"].ToString() + " - " + dr["Strength"].ToString();
                int    itemID        = Convert.ToInt32(dr["ID"]);
                bool   BalanceExists = (yProcess.DoesBalanceExist(year, storeId, itemID, false));

                //We don't want to display those items whose inventory has already been done.
                if (BalanceExists)
                {
                    continue;
                }

                //bereket
                //Int64 soh = bal.GetSOH(Convert.ToInt32(dr["ID"]), storeId, 10, year);
                var soh  = bal.GetSOHOptimized(Convert.ToInt32(dr["ID"]), storeId, month, year);
                var bbal = yEnd.GetBBalance(year, storeId, Convert.ToInt32(dr["ID"]), month);

                yProcess.GetBalanceByItemId(year, storeId, Convert.ToInt32(dr["ID"]));

                Int64 BB;
                BB = yProcess.RowCount > 0 ? yProcess.BBalance : bbal;
                Int64 EB;
                EB = yProcess.RowCount > 0 && yProcess.EBalance != 0 ? yProcess.EBalance : soh;
                //Now if the physical inventory is chosen to be default value, we set it to the ending balance of last year.
                string Phy = (yProcess.RowCount > 0) ? yProcess.PhysicalInventory.ToString() : (_defaultValueToPhysicalInventory ? EB.ToString() : "");
                //int id = (yProcess.RowCount > 0) ? yProcess.ID : 0;
                string remark = (yProcess.RowCount > 0) ? yProcess.Remark : "";
                //object[] obj = { Convert.ToInt32(dr["ID"]), count, itemName, "", BB, ((EB != 0) ? EB.ToString("#,###") : "0"), Phy, remark, id, -1 };
                //dtBB.Rows.Add(obj);
                DataRowView drv = dtBB.DefaultView.AddNew();
                if (yProcess.RowCount > 0)
                {
                    drv["ID"] = yProcess.ID;
                }
                drv["ItemId"]              = dr["ID"];
                drv["No."]                 = count;
                drv["Item Name"]           = itemName;
                drv["Beginning Balance"]   = BB;
                drv["Ending Balance(SOH)"] = EB;

                if (Phy != "")
                {
                    drv["Physical Inventory"] = Phy;
                }
                drv["RecID"]      = -1;
                drv["Unit Price"] = "_";
                drv["Remark"]     = remark;
                //drv["Change Since Sene 30"] = BLL.Balance.GetChangeAfterDate(itemID, storeId, ethioDate.EndOfFiscalYear.ToGregorianDate());
                count++;
                //if (!BalanceExists)
                //{
                int       theLastBalance = 0;
                DataTable dtBatchs       = recDoc.GetBatchWithValue(storeId, Convert.ToInt32(dr["ID"]), dtCurent);
                foreach (DataRow drBatch in dtBatchs.Rows.Cast <DataRow>().Where(drBatch => drBatch["QuantityLeft"] != DBNull.Value && Convert.ToInt64(drBatch["QuantityLeft"]) != 0))
                {
                    drv = dtBB.DefaultView.AddNew();
                    drv["Item Name"]           = ">>";
                    drv["Batch No."]           = drBatch["BatchNo"];
                    drv["Ending Balance(SOH)"] = Convert.ToInt64(drBatch["QuantityLeft"]);
                    //Now if the physical inventory is chosen to be default value, we set it to the ending balance of last year.
                    if (_defaultValueToPhysicalInventory)
                    {
                        drv["Physical Inventory"] = drBatch["QuantityLeft"].ToString();
                    }
                    theLastBalance   += Convert.ToInt32(drBatch["QuantityLeft"]);
                    drv["RecID"]      = drBatch["ID"];
                    drv["Unit Price"] = drBatch["Cost"];
                }
                //}
            }

            grdYearEnd.DataSource = dtBB;
            dtDate.CustomFormat   = "MMMM dd, yyyy";
        }