Good day to all,
Goal: I am sure there is a better way of doing this and would be appreciate this learning opportunity.
I have list of product requested items and i want to compute theirexpense each
department based on daterequested for7 days or a week , and I want to create abudgetController to display all theexpences ,budget , balance each departments for7days or a week , and we can also able to input the budget each department per week and save it,
I have three tables,kindly refer below.
TRANSACTIONISSUEDITEMS - list of product reqquested.TRANSACTIONISSUEDITEMS -TABLESREQUESTNO ITEM QTY COST TOTALCOST DATEREQUESTED DEPARTMENTS
10118193 ZMV49000336010 2500 0.01968 49.2 4-Jan-18 IT_Department
10118193 ZMV49000256010 10000 0.01968 196.8 5-Jan-18 IT_Department
10218194 100-472-0 2 2.51 5.02 5-Jan-18 IT_Department
10218195 ZGA74000312622 20000 0.016483 329.66 6-Jan-18 IT_Department
10218195 ZGA74000450160 12000 0.027388 328.656 6-Jan-18 IT_Department
10218195 ZMV74000301001 12000 0.0775 930 6-Jan-18 IT_Department
10218195 ZMV74000300110 19200 0.04236 813.312 7-Jan-18 IT_Department
10317002 GRAPHPAPER-002 1 47.33535 47.33535 8-Jan-18 Sample_Department
10317003 BONDPAPER-002 2 2.87134 5.74268 8-Jan-18 Sample_Department
10317003 N08177G001 50 0.15056 7.528 9-Jan-18 Sample_Department
10317003 N08179G001 100 0.20889 20.889 9-Jan-18 Sample_Department
10317003 N08179G001 50 0.20809 10.4045 10-Jan-18 Sample_Department
10317003 CARRIERTAPE-019 1 44.04027 44.04027 12-Jan-18 Sample_Department
10317003 CARRIERTAPE-028 1 23.50145 23.50145 14-Jan-18 Sample_Department
10317003 CARRIERTAPE-056 3 25.67001 77.01003 14-Jan-18 Sample_Department
BUDGETDEPARTMENTS - assign each department budgetBUDGETDEPARTMENTS - TABLESMONTH WORKWEEK YEAR DEPARTMENTID DATEINSERTED BUDGET
FISCALYEAR- fiscal we can upload a calendar, we have a separate calendar kindly my screenshot link below . https://imgur.com/a/VbluB - Calendar 1
https://imgur.com/a/ljkCd - Calendar 2 FISCALYEAR - TABLESMONTH YEAR WORKWEEK STARTDATE ENDDATE
Could you please help me to revised my code Adding saving data in Index Controller
Controller
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Data;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using WarehouseRtoRSystem.Models;
using WarehouseRtoRSystem.BusinessLayer.EDMX;
using OfficeOpenXml;
using System.Drawing;
using OfficeOpenXml.Style;
using WarehouseRtoRSystem.Models.Budget;
using System.Globalization;
namespace WarehouseRtoRSystem.Controllers
{
[Authorize]
public class BudgetController : Controller
{
private readonly RoleDataContext _roleDataContext = new RoleDataContext();
private readonly RoleAuthentication authenticate = new RoleAuthentication();
private readonly BudgetContext BudgetDb = new BudgetContext();
private readonly DepartmentContext DepartmentDB = new DepartmentContext();
private readonly EmployeeContext _employeeContext = new EmployeeContext();
private readonly InventoryContext inv = new InventoryContext();
public ActionResult Index()
{
ViewBag.month1 = 1;
ViewBag.month2 = 12;
ViewBag.year = 2018;
ViewBag.DepName = "DepName";
ViewBag.DepID = "1";
BudgetContext db = new BudgetContext();
var listSelectitem = db.List().Select(x => x.DEPARTMENTID).Distinct();
List<SelectListItem> ddllist = new List<SelectListItem>();
foreach (string bvm in listSelectitem)
{
ddllist.Add(new SelectListItem
{
Text = bvm,
Value = bvm
});
};
ViewBag.DeptList = ddllist;
var list = db.List().Where(b => b.DEPARTMENTID.Contains("DepName") && b.MONTH >= 1 && b.MONTH <= 12 && b.YEAR == 2018).ToList();
return View(list);
}
// POST: /Budget/
[HttpPost]
public ActionResult Index(string DepName , int day = 1, int month1 = 1, int month2 = 12, int year = 2018)
{
//check if the user has an Account
if (!RoleAuthentication.HasAccount(User.Identity.GetUserName()))
{
return RedirectToAction("Create", "Employee");
}
//check if the user is a requestor
if (!RoleAuthentication.IsAuthenticated(User.Identity.GetUserName(), "6"))
{
return RedirectToAction("Index", "Budget");
}
var InvContext = new InventoryContext();
var TRANSACTIONSISSUED = new List<TRANSACTIONISSUEDITEM>();
var ListTrans = InvContext.Transactions();
var Employeedb = new EmployeeContext();
var Employee = Employeedb.Find(User.Identity.GetUserName());
var budgetDb = new BudgetContext();
var DeptBudget = budgetDb.List().ToList();
TRANSACTIONSISSUED = InvContext.IssuedItems();
ViewBag.Message = "";
var YearSelected = new List<string>();
ViewBag.month1 = month1;
ViewBag.month2 = month2;
ViewBag.year = year;
ViewBag.Department = DepName;
BudgetContext db = new BudgetContext();
var listSelectitem = db.List().Select(x => x.DEPARTMENTID).Distinct();
List<SelectListItem> ddllist = new List<SelectListItem>();
foreach (string bvm in listSelectitem)
{
ddllist.Add(new SelectListItem
{
Text = bvm,
Value = bvm
});
};
ViewBag.DeptList = ddllist;
var list = db.List().Where(b => b.DEPARTMENTID.Contains(DepName) && b.MONTH >= month1 && b.MONTH <= month2 && b.YEAR == year ).ToList();
var Expences = (from i in TRANSACTIONSISSUED
join r in ListTrans
on i.REQUESTNO.Trim() equals r.REQUESTNO.Trim()
where
i.DEPARTMENT.Trim() == DepName.Trim() &&
i.DATETIME.Month == Month && i.DATETIME.Year == year
select new EXpenseTransactionViewModel
{
Month = i.DATETIME.Month,
Year = i.DATETIME.Year,
Department = i.DEPARTMENT,
Cost = i.COST,
Qty = i.QTY
}).ToList();
foreach (BudgetViewModel item in list)
{
double Expense = Expences.Where(e => e.Month == item.MONTH && e.week == item.WORKWEEK && e.Year == item.YEAR && e.Department.Trim() == item.DEPARTMENTID.Trim()).Sum(e => e.Cost * e.Qty);
item.EXPENCES = Expense;
item.BALANCE = item.BUDGET - item.EXPENCES;
}
return View(list.ToList());
}
//
// GET: /Budget/Create
public ActionResult Create()
{
var name = User.Identity.GetUserName();
var userroles = _roleDataContext.USERROLEs.Where(u => u.USERNAME.ToLower().Trim() == name.ToLower().Trim() && u.ROLE.Trim() == "6");
var rolegroup = from u in userroles.ToList()
join rg in _roleDataContext.ROLEGROUPs.ToList()
on u.ROLEID equals rg.ROLEID
select rg;
var usergroup = (from rg in rolegroup.ToList()
join ug in _roleDataContext.USERGROUPs.ToList()
on rg.GROUPID equals ug.GROUPID
select ug).OrderBy(i => i.DEPTCODE);
var listSelectitem = usergroup.Select(@group => new SelectListItem
{
Selected = true,
Text = @group.DEPTCODE.Length > 20 ? @group.DEPTCODE.Substring(0, 20) : @group.DEPTCODE,
Value = @group.DEPTCODE.Trim()
}).ToList();
var firstOrDefault = usergroup.FirstOrDefault();
if (firstOrDefault != null)
{
ViewBag.DeptList = new SelectList(listSelectitem, "Value", "Text", firstOrDefault.DEPTCODE);
}
return View();
}
//
// POST: /Budget/Create
[HttpPost]
public ActionResult Create(BudgetViewModel model , int month = 1, int year = 2017)
{
// try
// {
// TODO: Add insert logic here
model.DATETIME = DateTime.Now;
BudgetDb.insert(model);
return RedirectToAction("Index");
// }
// catch
//{
// return View(model);
// }
}
//
// GET: /Budget/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Budget/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Budget/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /Budget/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
Model
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
namespace WarehouseRtoRSystem.Models
{
public class BudgetModel
{
public int MONTH { get; set; }
public int YEAR { get; set; }
public int WORKWEEK { get; set; }
public string DEPARTMENTID { get; set; }
public DateTime DATEINSERTED { get; set; }
public double BUDGET { get; set; }
}
public class BudgetViewModel : BudgetModel
{
public string DEPARTMENTNAME { get; set; }
public double EXPENCES { get; set; }
public double BALANCE { get; set; }
}
public class BudgetContext
{
private readonly OracleCommand cmd = new OracleCommand();
private OracleConnection Conn = new OracleConnection();
private readonly OracleConnModel ORCONN = new OracleConnModel();
public List<BudgetViewModel> List()
{
var Departments = new List<BudgetViewModel>();
///SQL QUERY
Conn = ORCONN.con;
if (Conn.State != ConnectionState.Open)
{
Conn.Open();
}
try
{
cmd.Connection = Conn;
cmd.CommandText = "SELECT * From SSMP.SYSTEMBUDGET";
cmd.CommandType = CommandType.Text;
var dr = cmd.ExecuteReader();
while (dr.Read())
{
var Dept = new BudgetViewModel();
Dept.MONTH = dr.GetInt32(0);
Dept.YEAR = dr.GetInt32(1);
Dept.DEPARTMENTID = dr.IsDBNull(2) ? "" : dr.GetString(2) ;
Dept.DATETINSERTED = dr.GetDateTime(3);
Dept.BUDGET = dr.IsDBNull(4) ? 0 : dr.GetDouble(4);
Dept.WORKWEEK = dr.GetInt32(8);
Departments.Add(Dept);
}
}
finally
{
Conn.Close();
}
return Departments;
}
public string insert(BudgetViewModel model)
{
Conn = ORCONN.con;
if (Conn.State != ConnectionState.Open)
{
Conn.Open();
}
try
{
cmd.Connection = Conn;
//var date = new DateTime();
// date = DateTime.Now;
var query = "INSERT into SSMP.SYSTEMBUDGET(";
query += "MONTH,";
query += "YEAR,";
query += "DEPARTMENTID,";
query += "DATEINTERTED,";
query += "BUDGET,";
query += "WORKWEEK,";
query += ")";
query += "VALUES(";
query += "'" + model.MONTH + "',";
query += "'" + model.YEAR + "',";
query += "'" + model.DEPARTMENTID + "',";
query += "TO_DATE('" + DateTime.Now + "','MM/DD/YYYY HH:MI:SS AM'),";
query += "'"+ model.BUDGET + "'," ;
query += "'" + model.WORKWEEK + "'";
query += ")";
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
}
catch(Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
finally
{
Conn.Close();
}
return "Seccessfully inserted";
}
}
}
View
View
@model IEnumerable<WarehouseRtoRSystem.Models.BudgetViewModel><style>
td, th, li {
font-size: 8pt;
}
th, .label-heading {
font-size: 10pt;
font-weight: bold;
}
.body-content {
margin: 30px;
}
</style><h2><b>Budget</b></h2>
@{ string[] Months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; }<div class="w3-container w3-light-grey" style=""><div class="w3-container"><div class="w3-col m12 "><br /></div><div class="w3-col m12 "><br /></div>
@using (Html.BeginForm())
{
@ViewBag.Message<label> DEPARTMENT</label><span class="">@Html.DropDownList("DepName", (List<SelectListItem>)ViewBag.DeptList, "Please Select",new { @id = "RemarksId", @class = "" })</span><label>From </label><select id="month1" name="month1">
@for (var i = 0; i < 12; i++)
{
var m = i + 1;
if (Convert.ToInt32(ViewBag.month1) == m)
{<option value=@m selected>@Months[i]</option>
}
else
{<option value=@m>@Months[i]</option>
}
}</select><label>To </label><select id="month2" name="month2">
@for (var i = 0; i < 12; i++)
{
var m = i + 1;
if (Convert.ToInt32(ViewBag.month2) == m)
{<option value=@m selected>@Months[i]</option>
}
else
{<option value=@m>@Months[i]</option>
}
}</select><label>YEAR</label><select id="year" name="year">
@for (var c = 0; c < 1000; c++)
{
var yr = c + 2017;
if (Convert.ToInt32(ViewBag.year) == yr)
{<option value=@yr selected>
@yr</option>
}
else
{<option value=@yr> @yr</option>
}
}</select><b> <input type="submit" value="Filter" class="btn btn-default" /></b>
}<br /><a href="#" data-toggle="modal" data-target="#myModal" class="btn btn-primary btn-sm">Update Budget</a><div id="showModal"></div><div class="table-responsive col-lg-12 w3-light-grey w3-border" style=" height:500px;"><table class="table table-striped table-bordered"><tr class="w3-border"><th></th><th></th>
@for (int i = Convert.ToInt32(ViewBag.month1); i <= Convert.ToInt32(ViewBag.month2); i++)
{
var list = Model.Where(m => m.MONTH == i).OrderBy(m => m.WORKWEEK).Count() + 1;<th colspan='@list'><b>@Months[i - 1]</b></th>
}</tr><tr class="w3-light-grey"><td></td><td></td>
@for (int i = Convert.ToInt32(ViewBag.month1); i <= Convert.ToInt32(ViewBag.month2); i++)
{
var list = Model.Where(m => m.MONTH == i).OrderBy(m => m.WORKWEEK).ToList();
foreach (var item in list)
{<td>Week @item.WORKWEEK</td>
}<td><b>Total</b></td>
}</tr><tr class="w3-border"><td class=""></td><td><b>BUDGET</b></td>
@for (int i = Convert.ToInt32(ViewBag.month1); i <= Convert.ToInt32(ViewBag.month2); i++)
{
var list = Model.Where(m => m.MONTH == i).OrderBy(m => m.WORKWEEK).ToList();
foreach (var item in list)
{<td>@Html.TextBoxFor(model => item.BUDGET)<input type="submit" value="Save" class="btn btn-primary btn-xs" /></td>
}<td class="total"></td>
}</tr><tr class="w3-light-grey"><td class=""></td><td><b>ACTUAL</b></td>
@for (int i = Convert.ToInt32(ViewBag.month1); i <= Convert.ToInt32(ViewBag.month2); i++)
{
var list = Model.Where(m => m.MONTH == i).OrderBy(m => m.WORKWEEK).ToList();
foreach (var item in list)
{<td>@item.EXPENCES</td>
}<td class="total"></td>
}</tr><tr class="w3-border"><td></td><td><b>DIFFERENCE</b></td>
@for (int i = Convert.ToInt32(ViewBag.month1); i <= Convert.ToInt32(ViewBag.month2); i++)
{
var list = Model.Where(m => m.MONTH == i).OrderBy(m => m.WORKWEEK).ToList();
foreach (var item in list)
{<td>@item.BALANCE</td>
}<td class="total"></td>
}</tr></table></div></div></div>
@section scripts{
<script>$(".total").each(function () {
var total = 0;
if ($(this).prev().children().length > 0) {
total += parseInt($(this).prev().children().val());
total += parseInt($(this).prev().prev().children().val());
total += parseInt($(this).prev().prev().prev().children().val());
total += parseInt($(this).prev().prev().prev().prev().children().val());
if ($(this).prev().prev().prev().prev().prev().children().length != 0) {
total += parseInt($(this).prev().prev().prev().prev().prev().children().val());
}$(this).html(total);
} else {
total += parseInt($(this).prev().html());
total += parseInt($(this).prev().prev().html());
total += parseInt($(this).prev().prev().prev().html());
total += parseInt($(this).prev().prev().prev().prev().html());
if ($(this).prev().prev().prev().prev().prev().html() != "ACTUAL" && $(this).prev().prev().prev().prev().prev().html() != "DIFFERENCE" && $(this).prev().prev().prev().prev().prev().attr('class') != "total") {
total += parseInt($(this).prev().prev().prev().prev().prev().html());
}$(this).html(total);
}
})
firstDay = new Date(2017, 0, 1).getDay();
console.log(firstDay);
var year = 2017;
var week = 1;
var d = new Date("Jan 01, " + year + " 01:00:00");
var w = d.getTime() - (3600000 * 24 * (firstDay - 1)) + 604800000 * (week - 1)
var n1 = new Date(w);
var n2 = new Date(w + 518400000)
console.log(n1);
console.log(n2);
</script><link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" /><link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css" /><script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script><script>
var $j = jQuery.noConflict();$j("a").click(function () {$j("#showModal").html("");$j.ajax({
url: '/Budget/Create',
data: { month: 1, WORKWEEK: 1/*,other...*/ },
success: function (data) {$j("#showModal").html(data);$j("#myModal").show();$j("#myModal").draggable({ handle: ".modal-header" }); //Here add.
}
})
})$j("body").on("click", ".close", function () {$j("#showModal").html("");
})</script>
}
Desired Output
https://imgur.com/a/bsSo2