using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using AMESCoreStudio.WebApi; using AMESCoreStudio.WebApi.Models.AMES; namespace AMESCoreStudio.WebApi.Controllers.AMES { /// <summary> /// 工作群組維護 /// </summary> [Route("api/[controller]")] [ApiController] public class ExceptionWorktimeOlinesController : ControllerBase { private readonly AMESContext _context; /// <summary> /// /// </summary> /// <param name="context"></param> public ExceptionWorktimeOlinesController(AMESContext context) { _context = context; } /// <summary> /// /// </summary> /// <returns></returns> // GET: api/ExceptionWorktimeOlines [HttpGet] public async Task<ActionResult<IEnumerable<ExceptionWorktimeOline>>> GetExceptionWorktimeOline() { IQueryable<ExceptionWorktimeOline> q = _context.ExceptionWorktimeOlines; q = q.OrderBy(p => p.OlineID); var exceptionWorktimeOline = await q.ToListAsync(); return exceptionWorktimeOline; } /// <summary> /// /// </summary> /// <param name="id"></param> /// <returns></returns> // GET: api/ExceptionWorktimeOlines/5 [HttpGet("{id}")] public async Task<ActionResult<IEnumerable<ExceptionWorktimeOline>>> GetExceptionWorktimeOline(string id) { IQueryable<ExceptionWorktimeOline> q = _context.ExceptionWorktimeOlines; q = q.Where(p => p.OlineID.Equals(id)); var exceptionWorktimeOline = await q.ToListAsync(); if (exceptionWorktimeOline == null) { return NotFound(); } return exceptionWorktimeOline; } /// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="exceptionWorktimeOline"></param> /// <returns></returns> // PUT: api/ExceptionWorktimeOlines/5 // To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://go.microsoft.com/fwlink/?linkid=2123754. [HttpPut("{id}")] public async Task<ActionResult<ExceptionWorktimeOline>> PutExceptionWorktimeOline(int id, [FromBody] ExceptionWorktimeOline exceptionWorktimeOline) { if (id != exceptionWorktimeOline.OlineID) { return BadRequest(); } _context.Entry(exceptionWorktimeOline).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ExceptionWorktimeOlineExists(id)) { return NotFound(); } else { throw; } } return exceptionWorktimeOline; } /// <summary> /// 線上無效工時查詢Query /// </summary> /// <param name="factoryid"></param> /// <param name="unitid"></param> /// <param name="lineid"></param> /// <param name="deptid"></param> /// <param name="sdate"></param> /// <param name="edate"></param> /// <returns></returns> // GET: api/ExceptionWorktimeOnlines/5 [HttpGet("Query/{factoryid}/{unitid}/{lineid}/{deptid}/{sdate}/{edate}")] public async Task<ActionResult<IEnumerable<ExceptionWorktimeOline>>> GetExceptionWorktimeOlineByQuery(string factoryid, string unitid, string lineid, string deptid, string sdate, string edate) { IQueryable<ExceptionWorktimeOline> q = _context.ExceptionWorktimeOlines; if (factoryid != "*") q = q.Where(p => p.FactoryNo.Equals(factoryid)); if (unitid != "*") q = q.Where(p => p.UnitNo.Equals(unitid)); if (deptid != "*") q = q.Where(p => p.DecideDept.Equals(deptid)); if (lineid != "*") q = q.Where(p => p.LineID.Equals(lineid)); DateTime dateValue; if (sdate != "*") { if (DateTime.TryParse(sdate, out dateValue)) { q = q.Where(p => p.ExceptionDate >= DateTime.Parse(sdate)); } } if ( edate != "*") { if (DateTime.TryParse(edate, out dateValue)) { q = q.Where(p =>p.ExceptionDate <= DateTime.Parse(edate)); } } var exceptionWorktimeOline = await q.ToListAsync(); if (exceptionWorktimeOline == null) { return NotFound(); } return exceptionWorktimeOline; } /// <summary> /// 新增资料 /// </summary> /// <param name="exceptionWorktimeOline"></param> /// <returns></returns> // POST: api/ExceptionWorktimeOlines // To protect from overposting attacks, enable the specific properties you want to bind to, for // more details, see https://go.microsoft.com/fwlink/?linkid=2123754. [HttpPost] public async Task<ActionResult<ExceptionWorktimeOline>> PostExceptionWorktimeOline(ExceptionWorktimeOline exceptionWorktimeOline) { Helper helper = new Helper(_context); exceptionWorktimeOline.OlineID = helper.GetIDKey("ONLINE_ID").Result; _context.ExceptionWorktimeOlines.Add(exceptionWorktimeOline); await _context.SaveChangesAsync(); return CreatedAtAction("GetExceptionWorktimeOline", new { id = exceptionWorktimeOline.OlineID }, exceptionWorktimeOline); } /// <summary> /// /// </summary> /// <param name="id"></param> /// <returns></returns> // DELETE: api/ExceptionWorktimeOlines/5 [HttpDelete("{id}")] public async Task<ActionResult<ExceptionWorktimeOline>> DeleteExceptionWorktimeOline(int id) { var exceptionWorktimeOline = await _context.ExceptionWorktimeOlines.Where(p => p.OlineID == id).FirstOrDefaultAsync(); if (exceptionWorktimeOline == null) { return NotFound(); } _context.ExceptionWorktimeOlines.Remove(exceptionWorktimeOline); await _context.SaveChangesAsync(); return exceptionWorktimeOline; } private bool ExceptionWorktimeOlineExists(int id) { return _context.ExceptionWorktimeOlines.Any(e => e.OlineID == id); } } }