using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using Weee.DAL; using Weee.Filter; using Weee.Models; using Weee.Models.ExtensionMethods; using Weee.Service; namespace Weee.Controllers { public class WorkHourController : ApiControllerBase { private readonly WeeeMonthlyDataService service; private readonly WeeeDataContext _db; public WorkHourController(WeeeMonthlyDataService d, WeeeDataContext db) : base(d) { service = d; _db = db; } [Route("api/WorkHour/GetWorkHours")] [HttpPost] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object Get(PeopleTypesParameters parameters) { if (HttpContext.Current.Session!=null) HttpContext.Current.Session["LCAid"] = parameters.LCAID; Dictionary dictFactors = service.getWorkhourFactors(); List Factors = new List(); foreach(var rec in dictFactors) { Factors.Add(rec.Key); Factors.Add(rec.Value.ToString("0.0000000000")); } var GWP_CH4 = (from a in _db.AssessmentReportGWP where a.chemicalFormula == "CH4" select a).FirstOrDefault(); var arVersion = (from a in _db.LCAs // uow.GetDBcontext().LCAs where a.ID == parameters.LCAID select a.ARversion).FirstOrDefault(); if (GWP_CH4 != null && arVersion != null) { Factors.Add("GWP"); if (arVersion == "AR4") Factors.Add(GWP_CH4.AR4GWP100.ToString("0.0000000000")); else if (arVersion == "AR5") Factors.Add(GWP_CH4.AR5GWP100.ToString("0.0000000000")); else if (arVersion == "AR6") Factors.Add(GWP_CH4.AR6GWP100.ToString("0.0000000000")); } if (Factors.Count < 12) { for (int i = Factors.Count; i < 12; i++) Factors.Add(""); } if(parameters.peopleType == null) { parameters.peopleType = "直接人員"; } object ret = null; if (parameters.peopleType == "直接人員" || parameters.peopleType == "間接人員") { var WorkHours = service.GetSheet(parameters.LCAID); if (parameters.peopleType == "直接人員") { WorkHours = WorkHours.Where(x => x.Type == LCACommonSurveyForm_WorkHours.WorkHourType.Direct); if (!WorkHours.Any()) { var workHoursList = new List(); for (int i = 1; i <= 12; i++) { workHoursList.Add(new LCACommonSurveyForm_WorkHours { Type = LCACommonSurveyForm_WorkHours.WorkHourType.Direct, Index = i, LCAID = parameters.LCAID }); } WorkHours.Concat(workHoursList); _db.LCACommonSurveyForm_WorkHour.AddRange(workHoursList); _db.SaveChanges(); } } else if (parameters.peopleType == "間接人員") { WorkHours = WorkHours.Where(x => x.Type == LCACommonSurveyForm_WorkHours.WorkHourType.Indirect); if (!WorkHours.Any()) { var workHoursList = new List(); for (int i = 1; i <= 12; i++) { workHoursList.Add(new LCACommonSurveyForm_WorkHours { Type = LCACommonSurveyForm_WorkHours.WorkHourType.Indirect, Index = i, LCAID = parameters.LCAID }); } WorkHours.Concat(workHoursList); _db.LCACommonSurveyForm_WorkHour.AddRange(workHoursList); _db.SaveChanges(); } } ret = new { WorkHours, SheetHeader = service.GetSheetHeader(parameters.LCAID, Weee.Models.Paramemter.Categories.Septic), Factors }; } else { ret = new { WorkHours = service.GetSheet(parameters.LCAID).Where(x => x.Type == LCACommonSurveyForm_WorkHours.WorkHourType.WorkHourPeopleType && x.WorkHourPeopleType == parameters.peopleType), SheetHeader = service.GetSheetHeader(parameters.LCAID, Weee.Models.Paramemter.Categories.Septic), Factors }; } return ret; } [Route("api/WorkHour/GetAllWorkHours/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetAll(int LCAID) { if (HttpContext.Current.Session != null) HttpContext.Current.Session["LCAid"] = LCAID; Dictionary dictFactors = service.getWorkhourFactors(); List Factors = new List(); foreach (var rec in dictFactors) { Factors.Add(rec.Key); Factors.Add(rec.Value.ToString("0.0000000000")); } var GWP_CH4 = (from a in _db.AssessmentReportGWP where a.chemicalFormula == "CH4" select a).FirstOrDefault(); var arVersion = (from a in _db.LCAs // uow.GetDBcontext().LCAs where a.ID == LCAID select a.ARversion).FirstOrDefault(); if (GWP_CH4 != null && arVersion != null) { Factors.Add("GWP"); if (arVersion == "AR4") Factors.Add(GWP_CH4.AR4GWP100.ToString("0.0000000000")); else if (arVersion == "AR5") Factors.Add(GWP_CH4.AR5GWP100.ToString("0.0000000000")); else if (arVersion == "AR6") Factors.Add(GWP_CH4.AR6GWP100.ToString("0.0000000000")); } if (Factors.Count < 12) { for (int i = Factors.Count; i < 12; i++) Factors.Add(""); } var ret = new { WorkHours = service.GetSheet(LCAID).OrderBy(x=>x.Type).ThenBy(x=>x.WorkHourPeopleType).ThenBy(x=>x.Index), SheetHeader = service.GetSheetHeader(LCAID, Weee.Models.Paramemter.Categories.Septic), Factors }; return ret; } [Route("api/WorkHour/GetPeopleTypes/{LCAID}")] public object GetPeopleTypes(int LCAID) { if (HttpContext.Current.Session != null) HttpContext.Current.Session["LCAid"] = LCAID; var PeopleTypes = _db.LCACommonSurveyForm_WorkHour.Where(x => x.LCAID == LCAID && x.WorkHourPeopleType != null).Select(x => x.WorkHourPeopleType).Distinct().ToList(); if (!PeopleTypes.Contains("間接人員")) { PeopleTypes.Insert(0, "間接人員"); } if (!PeopleTypes.Contains("直接人員")) { PeopleTypes.Insert(0, "直接人員"); } object ret = new { PeopleTypes }; return ret; } public class PeopleTypesParameters { public int LCAID { get; set; } public String peopleType { get; set; } } [Route("api/WorkHour/CreatePeopleTypes")] [HttpPost] public object CreatePeopleTypes(PeopleTypesParameters parameters) { if (HttpContext.Current.Session != null) HttpContext.Current.Session["LCAid"] = parameters.LCAID; if(_db.LCACommonSurveyForm_WorkHour.Where(x => x.LCAID == parameters.LCAID && x.WorkHourPeopleType == parameters.peopleType).Count() > 0) { //return null; } else { for (int i = 1; i <= 12; i++) { var workHour = new LCACommonSurveyForm_WorkHours(); workHour.Index = i; workHour.WorkHourPeopleType = parameters.peopleType; workHour.Type = LCACommonSurveyForm_WorkHours.WorkHourType.WorkHourPeopleType; workHour.LCAID = parameters.LCAID; _db.LCACommonSurveyForm_WorkHour.Add(workHour); } _db.SaveChanges(); } var PeopleTypes = service.GetSheet(parameters.LCAID).Where(x => x.WorkHourPeopleType != null).Select(x => x.WorkHourPeopleType).Distinct().ToList(); if (!PeopleTypes.Contains("間接人員")) { PeopleTypes.Insert(0, "間接人員"); } if (!PeopleTypes.Contains("直接人員")) { PeopleTypes.Insert(0, "直接人員"); } object ret = new { PeopleTypes }; return ret; } [Route("api/WorkHour/DeletePeopleTypes")] [HttpPost] public object DeletePeopleTypes(PeopleTypesParameters parameters) { if (HttpContext.Current.Session != null) HttpContext.Current.Session["LCAid"] = parameters.LCAID; if (parameters.peopleType != "直接人員" && parameters.peopleType != "間接人員") { var workHourList = _db.LCACommonSurveyForm_WorkHour.Where(x => x.LCAID == parameters.LCAID && x.WorkHourPeopleType == parameters.peopleType); if (workHourList.Count() > 0) { _db.LCACommonSurveyForm_WorkHour.RemoveRange(workHourList); _db.SaveChanges(); } } var PeopleTypes = service.GetSheet(parameters.LCAID).Where(x => x.WorkHourPeopleType != null).Select(x => x.WorkHourPeopleType).Distinct().ToList(); if (!PeopleTypes.Contains("間接人員")) { PeopleTypes.Insert(0, "間接人員"); } if (!PeopleTypes.Contains("直接人員")) { PeopleTypes.Insert(0, "直接人員"); } object ret = new { PeopleTypes }; return ret; } [Route("api/WorkHour/SaveSheetHeader")] [HttpPost] public HttpResponseMessage SaveHeader(SheetHeader header) { return this.SaveSheetHeader(service, Weee.Models.Paramemter.Categories.Septic, header); } [Route("api/WorkHour/SaveWorkHours")] [HttpPost] [ApiEditableAttribute("ToBeSave", true)] public object SaveAll(IEnumerable ToBeSave) { if (!ModelState.IsValid) { throw new Exception("error"); } if (ToBeSave == null || ToBeSave.Count() == 0) return null; int LCAID = ToBeSave.First().LCAID; var spvalue = _db.NonYearlyParameters .Where(y => y.Type.Category.Category == Weee.Models.Paramemter.Categories.Septic) .Where(y => !y.IsHistory) .Where(y => y.Type.DisplayNameTW != "GWP") .AsNoTracking() .Select(y => y.Value) .AsEnumerable() .Multiply(); var GWP_CH4 = (from a in _db.AssessmentReportGWP where a.chemicalFormula == "CH4" select a).FirstOrDefault(); var arVersion = (from a in _db.LCAs // uow.GetDBcontext().LCAs where a.ID == LCAID select a.ARversion).FirstOrDefault(); if (GWP_CH4 != null && arVersion != null) { if (arVersion == "AR4") spvalue *= GWP_CH4.AR4GWP100; else if (arVersion == "AR5") spvalue *= GWP_CH4.AR5GWP100; else if (arVersion == "AR6") spvalue *= GWP_CH4.AR6GWP100; } // service.SaveMonthlyData(workhour); foreach (var item in ToBeSave) { var entity = _db.LCACommonSurveyForm_WorkHour.Where(x => x.ID == item.ID).FirstOrDefault(); if(entity != null) { _db.LCACommonSurveyForm_WorkHour.Remove(entity); } item.ID = 0; item.WorkerNumber = Math.Round(item.WorkerNumber, 4); item.WorkDay = Math.Round(item.WorkDay, 4); item.AverageHourPerDay = Math.Round(item.AverageHourPerDay, 4); item.UpdateKgCO2e(spvalue); //the kgco2e should devide by 8 , 因為係數中有一個單位為 每人每日(8小時)汙水量 , 而非每人每小時汙水量 //而工時的Scalar 單位為 "小時" item.KgCO2e *= 0.125m; } _db.SaveChanges(); //service.DeleteSheet(LCAID); var result = service.SaveSheet(ToBeSave); var qry = (from a in _db.LCAs where a.ID == LCAID select a).FirstOrDefault(); if (qry != null) { qry.activityDataTypeWorkHour = ActivityDataType.自行推估; qry.emitParaTypeWorkHour = EmitParaType.國家排放係數; _db.SaveChanges(); } return new { result = result }; } [Route("api/WorkHour/SaveAllTypesWorkHours")] [HttpPost] [ApiEditableAttribute("ToBeSave", true)] public object SaveAllTypes(IEnumerable ToBeSave) { if (!ModelState.IsValid) { throw new Exception("error"); } if (ToBeSave == null || ToBeSave.Count() == 0) return null; int LCAID = ToBeSave.First().LCAID; var spvalue = _db.NonYearlyParameters .Where(y => y.Type.Category.Category == Weee.Models.Paramemter.Categories.Septic) .Where(y => !y.IsHistory) .Where(y => y.Type.DisplayNameTW != "GWP") .AsNoTracking() .Select(y => y.Value) .AsEnumerable() .Multiply(); var GWP_CH4 = (from a in _db.AssessmentReportGWP where a.chemicalFormula == "CH4" select a).FirstOrDefault(); var arVersion = (from a in _db.LCAs // uow.GetDBcontext().LCAs where a.ID == LCAID select a.ARversion).FirstOrDefault(); if (GWP_CH4 != null && arVersion != null) { if (arVersion == "AR4") spvalue *= GWP_CH4.AR4GWP100; else if (arVersion == "AR5") spvalue *= GWP_CH4.AR5GWP100; else if (arVersion == "AR6") spvalue *= GWP_CH4.AR6GWP100; } // 全部清空 _db.LCACommonSurveyForm_WorkHour.RemoveRange(_db.LCACommonSurveyForm_WorkHour.Where(x => x.LCAID == LCAID).ToList()); // 再逐個類別匯入 foreach (var group in ToBeSave.GroupBy(x=>new { x.Type, x.WorkHourPeopleType }).ToList()) { var items = group.ToList(); var type = group.Key.Type; var workHourPeopleType = group.Key.WorkHourPeopleType; var cnt = items.Count(); for (var i = 0; i < items.Count() && i < 12; i++) { items[i].ID = 0; items[i].Index = i + 1; items[i].WorkerNumber = Math.Round(items[i].WorkerNumber, 4); items[i].WorkDay = Math.Round(items[i].WorkDay, 4); items[i].AverageHourPerDay = Math.Round(items[i].AverageHourPerDay, 4); items[i].UpdateKgCO2e(spvalue); //the kgco2e should devide by 8 , 因為係數中有一個單位為 每人每日(8小時)汙水量 , 而非每人每小時汙水量 //而工時的Scalar 單位為 "小時" items[i].KgCO2e *= 0.125m; } for(var i = cnt; i < 12; i++) { items.Add(new LCACommonSurveyForm_WorkHours() { ID = 0, LCAID = LCAID, Index = i + 1, Type = type, WorkHourPeopleType = workHourPeopleType, }); } _db.LCACommonSurveyForm_WorkHour.AddRange(items); } _db.SaveChanges(); var PeopleTypes = _db.LCACommonSurveyForm_WorkHour.Where(x => x.LCAID == LCAID && x.WorkHourPeopleType != null).Select(x => x.WorkHourPeopleType).Distinct().ToList(); if (!PeopleTypes.Contains("間接人員")) { PeopleTypes.Insert(0, "間接人員"); } if (!PeopleTypes.Contains("直接人員")) { PeopleTypes.Insert(0, "直接人員"); } object ret = new { PeopleTypes }; return ret; } //[Route("api/WorkHour/SaveWorkHour/{LCAID}/{id}")] //[HttpPost] //public int Save(int LCAID, int id, WorkHour workhour) //{ // if (!ModelState.IsValid) { return -1; } // if (id != workhour.ID || LCAID != workhour.LCAID) { return -1; } // return workhour.ID; //} //[Route("api/WorkHour/DeleteWorkHours/{LCAID}")] //[HttpDelete] //public IHttpActionResult DeleteAll(int LCAID) //{ // service.DeleteSheet(LCAID); // return Ok(); //} } }