220 lines
8.9 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|