示例#1
0
        private void BuildStoreInventoryListForHandleUnit(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", "UnitID" };//, "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;
            var dtCurent = new DateTime();

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

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

            if ((dtCurent.Month == 10 && dtCurent.Day == 30) || dtCurent.Month == 11)
            {
                btnSave.Enabled = ((!yProcess.IsInventoryComplete(year, storeId)));
                //btnSave.Enabled = true;
                month = 10;
            }
            else
            {
                btnSave.Enabled = false;
            }


            var yEnd = new YearEnd();

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

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


                // Int64 soh = bal.GetSOHByUnit(Convert.ToInt32(dr["ID"]), storeId, month, year,unitid);
                Int64 soh  = bal.GetSOHByUnitOptimized(Convert.ToInt32(dr["ID"]), storeId, month, year, unitid);
                Int64 bbal = yEnd.GetBBalanceByUnit(year, storeId, Convert.ToInt32(dr["ID"]), month, unitid);

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

                Int64  BB     = (yProcess.RowCount > 0) ? yProcess.BBalance : bbal;
                Int64  EB     = ((yProcess.RowCount > 0 && yProcess.EBalance != 0) ? yProcess.EBalance : soh);
                string Phy    = (yProcess.RowCount > 0) ? yProcess.PhysicalInventory.ToString() : (_defaultValueToPhysicalInventory ? EB.ToString() : "");
                string remark = (yProcess.RowCount > 0) ? yProcess.Remark : "";

                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;
                drv["UnitID"]              = unitid;

                if (Phy != "")
                {
                    drv["Physical Inventory"] = Phy;
                }
                drv["RecID"]      = -1;
                drv["Unit Price"] = "_";
                drv["Remark"]     = remark;
                count++;


                int       theLastBalance = 0;
                DataTable dtBatchs       = recDoc.GetBatchWithValueByUnit(storeId, Convert.ToInt32(dr["ID"]), dtCurent, unitid);
                foreach (DataRow drBatch in dtBatchs.Rows) //For each batch
                {
                    if (drBatch["QuantityLeft"] != DBNull.Value && Convert.ToInt64(drBatch["QuantityLeft"]) != 0)
                    {
                        drv = dtBB.DefaultView.AddNew();


                        drv["Item Name"]           = ">>";
                        drv["UnitID"]              = drBatch["UnitID"];
                        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"].ToString();
                    }
                }
                //}
            }

            grdYearEnd.DataSource = dtBB;
            dtDate.CustomFormat   = "MMMM dd, yyyy"; //throw new NotImplementedException();
        }