demo20230512/Controllers/Api/SupplierController.cs
2023-05-12 10:20:28 +08:00

220 lines
8.9 KiB
C#

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<object> GetByMyCompany()
{
var currentId = User.Identity.GetUserId();
var qry = db.Users.Where(x => x.Id == currentId && x.IsCompanyAdmin == true);
if (!qry.Any())
return new List<Supplier>();
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<object> GetByMyCompany2()
{
var currentId = User.Identity.GetUserId();
var qry = db.Users.Where(x => x.Id == currentId && x.IsCompanyAdmin == true);
if (!qry.Any())
return new List<Supplier>();
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;
}
/// <summary>
/// 檢查 UserName 是否存在且啟用。檢查Name是否同帳戶的supplier沒有重複(不存在)
/// </summary>
/// <param name="toBeSave"></param>
/// <returns></returns>
[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<Supplier> 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;
}
}
}