using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using System.Web.Http.Description; using Weee.Filter; using Weee.Models; using Weee.Service; using PagedList; using Weee.DAL; using Weee.Models.Paramemter; namespace Weee.Controllers { //[ApiMultilanguage]disable obsolete warning, not sure OK or not public class MaterialController : ApiControllerBase { private readonly WeeeParameterDataService parameterservice; private readonly WeeeSheetDataService service; private readonly WeeeDataContext _db; public MaterialController(WeeeSheetDataService s, WeeeParameterDataService n, WeeeDataContext db) : base(s) { service = s; parameterservice = n; _db = db; } //this api is for high level Analyze [Route("api/Material/GetAllMaterials/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetAllMaterials(int LCAID) { var query = service.GetSheet(LCAID) .Include(x => x.ChildMaterials) .Include(x => x.RequestSent) .Include(x => x.MaterialComposites) .Where(x => x.ParentMaterialID == null) .OrderBy(x => x.orderNo); var result = query.ToList(); object ret= new { materials = result, }; return ret; } [HttpPost] [Route("api/Material/ReNumber/{LCAID}/{materialtype:int}")] public string ReNumber(int LCAID, int materialtype) { string ret=""; try { var qry = (from a in _db.ProductLCAProductSurveyForm_Material where a.LCAID == LCAID && a.MaterialType == (MaterialType)materialtype orderby a.orderNo select a).AsQueryable(); if (qry != null && qry.Any()) { int i = 0; foreach (var rec in qry.ToList()) { i++; rec.orderNo = i ; } } _db.SaveChanges(); } catch(Exception ex) { ret = CScommon.Exceptions.inner(ex).Message; } return ret; } //this api is for bom and 3 materials [Route("api/Material/GetMaterials/{LCAID}/{page:int=1}/{materialtype:int=3}/{search?}/{pagesize:min(4):int=15}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetMaterials(int LCAID, int page = 1, int materialtype = 3, string search = "", int pagesize = 15) { var query = service.GetSheet(LCAID) .Include(x => x.ChildMaterials) .Where(x => x.ParentMaterialID == null); if (search != "") { query = query.Where(x => x.Name.Contains(search) || //x.LocalName.Contains(search) || x.Unit.Contains(search) || x.PartNumber.Contains(search) || x.Composite.Contains(search)); } if (materialtype == 0 || materialtype == 1 || materialtype == 2) { query = query.Where(x => x.MaterialType == (MaterialType)materialtype); } var result = query.ToPagedList(page, pagesize); object ret = new { materials = result, optiontypes = parameterservice.GetSimaproCategories(), optionunits = parameterservice.GetSimaproUnits(), totalpages = result.PageCount, SheetHeader = service.GetSheetHeader(LCAID, Models.Paramemter.Categories.DirectMaterial), currentPage = page }; return ret; } [Route("api/DirectMaterial/GetSheetHeader/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetDirectMaterialHeader(int LCAID) { return new { SheetHeader = service.GetSheetHeader(LCAID, Models.Paramemter.Categories.DirectMaterial) }; } [Route("api/IndirectMaterial/GetSheetHeader/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetIndirectMaterialHeader(int LCAID) { return new { SheetHeader = service.GetSheetHeader(LCAID, Models.Paramemter.Categories.IndirectMaterial) }; } [Route("api/WrapMaterial/GetSheetHeader/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetWrapMaterialHeader(int LCAID) { return new { SheetHeader = service.GetSheetHeader(LCAID, Models.Paramemter.Categories.WrapMaterial) }; } [Route("api/BOM/GetSheetHeader/{LCAID}")] //[Filter.ApiMultilanguage]disable obsolete warning, not sure OK or not public object GetBOMHeader(int LCAID) { return new { SheetHeader = service.GetSheetHeader(LCAID, Models.Paramemter.Categories.BOM) }; } //[Route("api/Material/SaveMaterial/{LCAID}/{id}")] //[HttpPost] //public object SaveMaterial(int LCAID, int id, Material material) //{ // if (!ModelState.IsValid) { return BadRequest(); } // if (id != material.ID || LCAID != material.LCAID) { BadRequest(); } // var result = service.SaveSheetItem(material); // return material; //} [Route("api/Material/SaveMaterials")] [HttpPost] [ApiEditableAttribute("materials", true)] public object SaveMaterials(List materials) { if (materials.Any(x => x.VendorCode != null))//special case for high level analyze file import { var companyId = service.GetUserContext().CompanyID; var joinLeft = from x in materials where x.VendorCode != null where x.MaterialType == MaterialType.DirectMaterial select x; var joinRight = from x in _db.Suppliers where x.VendorCode != null where x.CompanyID == companyId select x; var joinResults = (from x in joinLeft join y in joinRight on x.VendorCode.ToLower() equals y.VendorCode.ToLower() select new { x, y }).ToList(); foreach (var joinResult in joinResults) { joinResult.x.SupplierCompanyName = joinResult.y.UserName;//.Name; joinResult.x.SupplierCompanyEmail = joinResult.y.ContactEmail; } } //var venderCodes = temp.Select(x => x.VendorCode.ToLower()).Distinct(); //var selectedSupplier = _db.Suppliers // .Where(x => x.CompanyID == service.GetUserContext().CompanyID) // .Where(x => venderCodes.Contains(x.VendorCode.ToLower())) // .Select(x => new { email = x.ContactEmail, name = x.Name }); //foreach (var material in temp) //{ //} var materialComposites = materials.Select(x => x.MaterialComposites).ToList(); foreach(var material in materials) material.MaterialComposites = new List(); var result = service.SaveSheet(materials).ToList(); for(var i = 0; i < materials.Count(); i++) { if (materialComposites != null && materialComposites.Count > i && materialComposites[i]!=null) { foreach (var composite in materialComposites[i]) composite.materialID = result[i].ID; } materials[i].MaterialComposites = materialComposites[i]; service.UpdateMaterialComposites(result[i].ID, materials[i].MaterialComposites); } return new { result = result }; } [Route("api/DirectMaterial/SaveSheetHeader")] [HttpPost] public HttpResponseMessage SaveDirectMaterialHeader(SheetHeader header) { return this.SaveSheetHeader(service, Categories.DirectMaterial, header); } [Route("api/IndirectMaterial/SaveSheetHeader")] [HttpPost] public HttpResponseMessage SaveIndirectMaterialHeader(SheetHeader header) { return this.SaveSheetHeader(service, Categories.IndirectMaterial, header); } [Route("api/WrapMaterial/SaveSheetHeader")] [HttpPost] public HttpResponseMessage SaveWrapMaterialHeader(SheetHeader header) { return this.SaveSheetHeader(service, Categories.WrapMaterial, header); } [Route("api/BOM/SaveSheetHeader")] [HttpPost] public HttpResponseMessage SaveBOMHeader(SheetHeader header) { return this.SaveSheetHeader(service, Categories.BOM, header); } [Route("api/Material/DeleteMaterial/{LCAID}/{id}")] [HttpDelete] public IHttpActionResult DeleteMaterial(int LCAID, int id) { service.DeleteMaterials(null, id, null); return Ok(); } [Route("api/Material/DeleteMaterials/{LCAID}")] [HttpDelete] public IHttpActionResult DeleteMaterials(int LCAID) { service.DeleteMaterials(LCAID, null, null); return Ok(); } [Route("api/Material/DeleteMaterials/{LCAID}/{MType}")] [HttpDelete] public IHttpActionResult DeleteDirectMaterials(int LCAID, MaterialType MType) { service.DeleteMaterials(LCAID,null, MType); return Ok(); } } }