using Microsoft.EntityFrameworkCore;
using ServerApp.Migrations;
using ServerApp.Models.DTOs;
using ServerApp.Models.Entities;
using ServerApp.Pages.Management;
using ServerApp.Repositories;
namespace ServerApp.Interfaces.Repositories
public interface IMaterialMagRackRepository : IBaseRepository<MaterialMagRackEntity>
Task<MaterialMagRackEntity> GetRackByName(int rack, int rackRow, int rackCol);
Task<List<MaterialRackDTO>> GetMaterialRacks(int rackNumber, int rackRow, int rackCol, string mgz,string pcbcode, string boxcode, int status);
Task<List<MaterialMagRackEntity>> GetRackPriority(int numberDest);
Task<List<MaterialMagRackEntity>> GetMaterialBoxByTime(int numberDest);
Task<MaterialRackDTO> GetMaterialRack(Guid RackId);
public class MaterialMagRackRepository : BaseRepository<MaterialMagRackEntity>, IMaterialMagRackRepository
public MaterialMagRackRepository(ApplicationDbContext context) : base(context)
public Task<List<MaterialRackDTO>> GetMaterialRacks(int rackNumber, int rackRow, int rackCol, string mgzCode, string pcbCode, string boxCode, int status)
var query = from rack in _context.MaterialMagRacks
join _mgz in _context.MaterialMgzes on rack.MagazineId equals _mgz.Id into mgzGrp
from mgz in mgzGrp.DefaultIfEmpty()
join _box in _context.MaterialMagBoxes on mgz.Id equals _box.MagazineId into boxGrp
from box in boxGrp.DefaultIfEmpty()
(status == RackStatus.ALL ? true : rack.RackStatus == status) &&
(rackNumber == 0 ? true : rack.RackNumber == rackNumber) &&
(rackRow == 0 ? true : rack.RowNumber == rackRow) &&
(rackCol == 0 ? true : rack.ColNumber == rackCol) &&
(string.IsNullOrEmpty(mgzCode) ? true : (mgz == null ? true : mgz.MagazineCode.Contains(mgzCode))) &&
(string.IsNullOrEmpty(pcbCode) ? true : (mgz == null ? true : mgz.PCBCode == pcbCode)) &&
(string.IsNullOrEmpty(boxCode) ? true : (box == null ? true : box.BoxName == boxCode))
select new MaterialRackDTO
MgzId = mgz == null ? Guid.Empty : mgz.Id,
BoxId = box == null ? Guid.Empty : box.Id,
RackPriority = rack.RackPriority,
RackNumber = rack.RackNumber,
RackRow = rack.RowNumber,
RackCol = rack.ColNumber,
RackStatus = rack.RackStatus,
MgzCode = mgz == null ? "" : mgz.MagazineCode,
MgzStatus = mgz == null ? 0 : mgz.Status,
PCBCode = string.IsNullOrEmpty(mgz.PCBCode) ? "-" : mgz.PCBCode,
PCBQty = mgz == null ? 0 : mgz.PCBQty,
PCBRev = mgz == null ? "" : mgz.PCBRev,
PositionCode = string.IsNullOrEmpty(rack.PositionCode) ? "-" : rack.PositionCode,
rack.RackStatus == RackStatus.EMPTY ? RackStatusText.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusText.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? RackStatusText.OUT_WAITING :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusText.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusText.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusText.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusText.HAS_FIXED_BOX : ""
rack.RackStatus == RackStatus.EMPTY ? RackStatusTextEng.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusTextEng.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? RackStatusTextEng.OUT_WAITING :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusTextEng.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusTextEng.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusTextEng.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusTextEng.HAS_FIXED_BOX : ""
rack.RackStatus == RackStatus.EMPTY ? RackStatusColor.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusColor.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? (mgz == null ? RackStatusColor.NO_MAGAZINE : mgz.Status == MagazineStatus.KITTING ? RackStatusColor.HAS_FIXED_BOX : RackStatusColor.HAS_BOX) :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusColor.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusColor.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusColor.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusColor.HAS_FIXED_BOX : ""
RackCode = rack.RackNumber.ToString() + "-" + rack.RowNumber.ToString() + "-" + rack.ColNumber.ToString(),
return query.ToListAsync();
public Task<MaterialRackDTO> GetMaterialRack(Guid RackId)
var query = from rack in _context.MaterialMagRacks
join magazine in _context.MaterialMgzes on rack.MagazineId equals magazine.Id into mgzGrp
from mgzDB in mgzGrp.DefaultIfEmpty()
join box in _context.MaterialMagBoxes on mgzDB.Id equals box.MagazineId into boxGrp
from boxDB in boxGrp.DefaultIfEmpty()
select new MaterialRackDTO
MgzId = mgzDB == null ? Guid.Empty : mgzDB.Id,
BoxId = boxDB == null ? Guid.Empty : boxDB.Id,
RackPriority = rack.RackPriority,
RackNumber = rack.RackNumber,
RackRow = rack.RowNumber,
RackCol = rack.ColNumber,
RackStatus = rack.RackStatus,
MgzCode = mgzDB == null ? "" : mgzDB.MagazineCode,
MgzStatus = mgzDB == null ? 0 : mgzDB.Status,
PCBCode = string.IsNullOrEmpty(mgzDB.PCBCode) ? "-" : mgzDB.PCBCode,
PCBQty = mgzDB == null ? 0 : mgzDB.PCBQty,
PCBRev = mgzDB == null ? "" : mgzDB.PCBRev,
PositionCode = string.IsNullOrEmpty(rack.PositionCode) ? "-" : rack.PositionCode,
rack.RackStatus == RackStatus.EMPTY ? RackStatusText.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusText.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? RackStatusText.OUT_WAITING :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusText.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusText.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusText.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusText.HAS_FIXED_BOX : ""
rack.RackStatus == RackStatus.EMPTY ? RackStatusTextEng.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusTextEng.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? RackStatusTextEng.OUT_WAITING :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusTextEng.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusTextEng.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusTextEng.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusTextEng.HAS_FIXED_BOX : ""
rack.RackStatus == RackStatus.EMPTY ? RackStatusColor.EMPTY :
rack.RackStatus == RackStatus.IN_WAITING ? RackStatusColor.IN_WAITING :
rack.RackStatus == RackStatus.OUT_WAITING ? (mgzDB == null ? RackStatusColor.NO_MAGAZINE : mgzDB.Status == MagazineStatus.KITTING ? RackStatusColor.HAS_FIXED_BOX : RackStatusColor.HAS_BOX) :
rack.RackStatus == RackStatus.UNDEFINED ? RackStatusColor.UNDEFINED :
rack.RackStatus == RackStatus.HAS_BOX ? RackStatusColor.HAS_BOX :
rack.RackStatus == RackStatus.NO_MAGAZINE ? RackStatusColor.NO_MAGAZINE :
rack.RackStatus == RackStatus.HAS_FIXED_BOX ? RackStatusColor.HAS_FIXED_BOX : ""
RackCode = rack.RackNumber.ToString() + "-" + rack.RowNumber.ToString() + "-" + rack.ColNumber.ToString(),
return query.FirstOrDefaultAsync();
public Task<MaterialMagRackEntity> GetRackByName(int rack, int rackRow, int rackCol)
return _context.MaterialMagRacks.Where(r => r.RackNumber == rack && r.RowNumber == rackRow && r.ColNumber == rackCol).FirstOrDefaultAsync();
public Task<List<MaterialMagRackEntity>> GetRackPriority(int numberDest)
return _context.MaterialMagRacks.Where(s => s.RackStatus == RackStatus.EMPTY && s.RackPriority != 999).OrderBy(r => r.RackPriority).Take(numberDest).ToListAsync();
public Task<List<MaterialMagRackEntity>> GetMaterialBoxByTime(int numberDest)
var query = from rack in _context.MaterialMagRacks
join magazine in _context.MaterialMgzes on rack.MagazineId equals magazine.Id into mgzGrp
from mgzDB in mgzGrp.DefaultIfEmpty()
where rack.RackStatus == RackStatus.HAS_BOX && rack.RackPriority != 999
orderby rack.RackPriority descending
return query.Take(numberDest).ToListAsync();