using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using Microsoft.AspNet.Identity; using Weee.DAL; using Weee.Filter; using Weee.Models; using System.Data.Entity; using CScommon; using Qcarbon.Interfaces.adminCheck; using NLog; using System.Web.Http.Controllers; using Qcarbon.Database.adminCheck; using Qcarbon.ViewModels.admin; namespace Weee.Controllers.Api { [Authorize(Roles = ProgramConstants.normalcompany)] public class SupplierController : ApiController { private readonly WeeeDataContext db; protected IadminCheckService _adminCheckService; protected IcompanyAdminCheckService _companyAdminCheckService; protected Logger log; public SupplierController(WeeeDataContext d) { db = d; } protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); var userid = User.Identity.GetUserId(); _adminCheckService = new adminCheckService(db, userid); _companyAdminCheckService = new companyAdminCheckService(db, userid); log = NLog.LogManager.GetCurrentClassLogger(); } [Route("api/Supplier/GetByMyCompany")] [Route("api/Supplier/Get")] [HttpGet] public IEnumerable GetByMyCompany() { var currentId = User.Identity.GetUserId(); var qry = db.Users.Where(x => x.Id == currentId && x.IsCompanyAdmin == true); if (!qry.Any()) return new List(); var currentCompanyId = qry.Select(x => x.CompanyID).Single(); var ret = db.Suppliers.Where(x => x.CompanyID == currentCompanyId //&& x.UserName != null && x.UserName.Length>0 ).ToList(); return ret; } [Route("api/Supplier/GetByMyCompany2")] [HttpGet] public IEnumerable GetByMyCompany2() { var currentId = User.Identity.GetUserId(); var qry = db.Users.Where(x => x.Id == currentId && x.IsCompanyAdmin == true); if (!qry.Any()) return new List(); var currentCompanyId = qry.Select(x => x.CompanyID).Single(); var ret = (from a in db.Suppliers join b in db.Users on a.UserName equals b.UserName where a.CompanyID == currentCompanyId select new { ID = a.ID, Name = a.Name, Address = a.Address, VendorCode = a.VendorCode, Phone = a.Phone, ContactName = a.ContactName, ContactPhone = a.ContactPhone, ContactEmail = a.ContactEmail, Description = a.Description, CompanyID = a.CompanyID, UserName = a.UserName, SupplierCompanyID = b.CompanyID }).ToList(); //var ret = db.Suppliers.Where(x => x.CompanyID == currentCompanyId // && x.UserName != null && x.UserName.Length > 0 // ).ToList(); return ret; } [Route("api/Supplier/Save/{id?}")] [HttpPost] public int Save(Supplier toBeSave) { var currentId = User.Identity.GetUserId(); if (!_adminCheckService.adminCheckPass()) { AdminAccess aa = _adminCheckService.getAdminAccess(); int supplierQuantity = _adminCheckService.getSupplierQuantity(); if (supplierQuantity >= aa.supplierLimit && aa.supplierLimit != -1) throw new Exception( $"供應商帳號數({supplierQuantity})已達或超過全站限制" + $"({aa.supplierLimit}),請系統管理員更新金鑰限制重新匯入"); companyAdminAccessVM uaaVM = _companyAdminCheckService .getCompanyAdminAccessVM( _companyAdminCheckService.userId2companyID(currentId)); int supplierQuantityByUserId = _companyAdminCheckService.getSupplierQuantityByUserId(currentId); if (supplierQuantityByUserId>=uaaVM.supplierLimit && uaaVM.supplierLimit!=-1) throw new Exception( $"供應商帳號數({supplierQuantityByUserId})已達或超過公司限制" + $"({uaaVM.supplierLimit}),請公司管理員更新金鑰限制重新匯入"); } var currentCompanyId = db.Users.Where(x => x.Id == currentId).Select(x => x.CompanyID).Single(); toBeSave.CompanyID = currentCompanyId.Value; var entry = db.Entry(toBeSave); if (toBeSave.ID == 0) entry.State = EntityState.Added; else entry.State = EntityState.Modified; db.SaveChanges(); return toBeSave.ID; } /// /// 檢查 UserName 是否存在且啟用。檢查Name是否同帳戶的supplier沒有重複(不存在) /// /// /// [Route("api/Supplier/Check/{id?}")] [HttpPost] public object Check(Supplier toBeSave) { string err = ""; object ret; var currentId = User.Identity.GetUserId(); var currentCompanyId = db.Users.Where(x => x.Id == currentId).Select(x => x.CompanyID).Single(); var qry = db.Users.Where(x => x.UserName == toBeSave.UserName).FirstOrDefault(); User usr = null; if (qry == null) err = $"登入帳號 {toBeSave.UserName} 不存在!"; else { usr = qry; var qry2 = db.Companies.Where(x => x.ID == qry.CompanyID && x.Status == CompanyStatus.Active).FirstOrDefault(); if (qry2 == null) err = $"登入帳號 {toBeSave.UserName} 未啟用!"; else { var b = qry2.GetType().BaseType; if (qry2.GetType().BaseType.Equals(typeof(Weee.Models.CertificationCompany))) err = $"登入帳號 {toBeSave.UserName} 為驗證公司,不得使用!"; else { var qry3 = db.Suppliers.Where(x => x.CompanyID == currentCompanyId && x.Name == toBeSave.Name.Trim()).ToList(); if (qry3.Count > 0) err = $"供應商名稱 {toBeSave.Name} 已使用,不得重複!"; else { var qry4 = db.Suppliers.Where(x => x.CompanyID == currentCompanyId && x.UserName == toBeSave.UserName.Trim()).ToList(); if (qry4.Count > 0) err = $"供應商帳號 {toBeSave.UserName} 已使用,不得重複!"; } } } } ret = new { err = err, UserName = usr==null ? null : usr.UserName, Name = usr == null ? null : usr.Name, Email = usr == null ? null : usr.Email, PhoneNumber = usr == null ? null : usr.PhoneNumber, MobileNumber = usr == null ? null : usr.MobileNumber }; return ret;// err; } [Route("api/Supplier/BatchCreate")] [HttpPost] public object BatchCreate(List toBeSave) { var currentId = User.Identity.GetUserId(); var userName = User.Identity.GetUserName(); var currentCompanyId = db.Users.Where(x => x.Id == currentId).Select(x => x.CompanyID).Single(); foreach (var item in toBeSave) { item.CompanyID = currentCompanyId.Value; item.UserName = userName; var entry = db.Entry(item); if (item.ID == 0) entry.State = EntityState.Added; } db.SaveChanges(); return toBeSave; } [Route("api/Supplier/{ID}")] [HttpDelete] public HttpStatusCode Delete(int ID=0) { var currentId = User.Identity.GetUserId(); var currentCompanyId = db.Users.Where(x => x.Id == currentId).Select(x => x.CompanyID).Single(); var supplier = db.Suppliers.Where(x => x.CompanyID == currentCompanyId && x.ID == ID).Single(); db.Suppliers.Remove(supplier); db.SaveChanges(); return HttpStatusCode.OK; } } }