Example #1
0
        public async Task <ResponseViewModel <GenericResponseModel> > UpdateTruckOnWarehouseCheck(TheoryWeighValueModel theoryWeighValueModel)
        {
            ResponseViewModel <GenericResponseModel> response = new ResponseViewModel <GenericResponseModel>();

            try
            {
                var gatePass = await _gatePassRepository.GetAsync(gt => gt.ID == theoryWeighValueModel.gatePassID && gt.isDelete == false, QueryIncludes.GATEPASSFULLINCLUDES);

                if (gatePass == null)
                {
                    return(response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
                }
                else
                {
                    switch (gatePass.stateID)
                    {
                    case GatepassState.STATE_FINISH_WEIGHT_IN:
                        return(await this.UpdateTruckOnWarehouseCheckIn(theoryWeighValueModel));

                    case GatepassState.STATE_FINISH_WAREHOUSE_CHECK_IN:
                        return(await this.UpdateTruckOnWarehouseCheckOut(theoryWeighValueModel));

                    default:
                        return(response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
                    }
                }
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
            }
        }
        public async Task <ResponseViewModel <WeightRecordViewModel> > UpdateWeightValue(WeightDataViewModel weightDataViewModel)
        {
            ResponseViewModel <WeightRecordViewModel> response = new ResponseViewModel <WeightRecordViewModel>();

            try
            {
                WeightRecord weightRecord = new WeightRecord();
                Random       r            = new Random();
                //if (await _authService.CheckUserPermission(weightDataViewModel.employeeID, weightDataViewModel.employeeRFID, "UpdateWeightValue"))
                //{
                var weighNum = await _weightRecordRepository.GetManyAsync(wt => wt.gatepassID == weightDataViewModel.gatePassID && wt.isDelete == false);

                weightRecord.code          = r.Next().ToString();
                weightRecord.gatepassID    = weightDataViewModel.gatePassID;
                weightRecord.isDelete      = false;
                weightRecord.weighBridgeID = weightDataViewModel.weighBridgeID;
                weightRecord.weighBridge   = await _weighBridgeRepository.GetByIdAsync(weightDataViewModel.weighBridgeID);

                weightRecord.weightEmployeeID = weightDataViewModel.employeeID;
                weightRecord.employee         = await _employeeRepository.GetByIdAsync(weightDataViewModel.employeeID);

                weightRecord.weightTime                 = DateTime.Now;
                weightRecord.weightValue                = weightDataViewModel.weightValue;
                weightRecord.frontCameraCapturePath     = Constant.TruckCapturePath + weightDataViewModel.fontCameraName;
                weightRecord.gearCameraCapturePath      = Constant.TruckCapturePath + weightDataViewModel.gearCameraName;
                weightRecord.cabinCameraCapturePath     = Constant.TruckCapturePath + weightDataViewModel.cabinCameraName;
                weightRecord.containerCameraCapturePath = Constant.TruckCapturePath + weightDataViewModel.containerCameraName;
                weightRecord.weightNo = weighNum.Count() + 1;
                var gatePass = await _gatePassRepository.GetAsync(gt => gt.ID == weightDataViewModel.gatePassID && gt.isDelete == false);

                if (gatePass.stateID == GatepassState.STATE_FINISH_SECURITY_CHECK_IN)
                {
                    gatePass.stateID = GatepassState.STATE_FINISH_WEIGHT_IN;
                }
                else if (gatePass.stateID == GatepassState.STATE_FINISH_WAREHOUSE_CHECK_OUT)
                {
                    gatePass.stateID = GatepassState.STATE_FINISH_WEIGHT_OUT;
                }
                _gatePassRepository.Update(gatePass);
                _weightRecordRepository.Add(weightRecord);
                if (await _unitOfWork.SaveChangesAsync())
                {
                    response = ResponseConstructor <WeightRecordViewModel> .ConstructBoolRes(ResponseCode.SUCCESS, true);
                }
                else
                {
                    response = ResponseConstructor <WeightRecordViewModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false);
                }
                //}
                //else
                //{
                //    response = ResponseConstructor<WeightRecordViewModel>.ConstructBoolRes(ResponseCode.ERR_WEI_WEIGH_NOT_PERMITTED, false);
                //}
                return(response);
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <WeightRecordViewModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
            }
        }
Example #3
0
        public async Task <ResponseViewModel <SystemFunctionViewModel> > GetUserPermission(int userID)
        {
            ResponseViewModel <SystemFunctionViewModel>  response = new ResponseViewModel <SystemFunctionViewModel>();
            Dictionary <string, SystemFunctionViewModel> systemFunctionViewModels = new Dictionary <string, SystemFunctionViewModel>();
            var user = await _userRepository.GetAsync(us => us.ID == userID, QueryIncludes.USERFULLINCLUDES);

            if (user == null)
            {
                return(response = ResponseConstructor <SystemFunctionViewModel> .ConstructData(ResponseCode.ERR_USER_NOT_EXSIT, null));
            }
            else
            {
                var employee = user.employees.FirstOrDefault();
                foreach (var group in employee.groupMaps)
                {
                    foreach (var function in group.employeeGroup.functionMaps)
                    {
                        try
                        {
                            systemFunctionViewModels.Add(function.systemFunction.Code, Mapper.Map <SystemFunction, SystemFunctionViewModel>(function.systemFunction));
                        }
                        catch (Exception)
                        {
                            continue;
                        }
                    }
                }
                response = ResponseConstructor <SystemFunctionViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, systemFunctionViewModels.Values.ToList());
            }
            return(response);
        }
        public async Task <ResponseViewModel <QueueListViewModel> > GetQueueList()
        {
            ResponseViewModel <QueueListViewModel> response = new ResponseViewModel <QueueListViewModel>();

            try
            {
                var queueList = await _queueListRepository.GetManyAsync(qu => qu.isDelete == false, QueryIncludes.QUEUELISTFULLINCLUDES);

                if (queueList == null)
                {
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.ERR_QUE_NO_QUEUE_FOUND, null);
                }
                else
                {
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS,
                                                                                                 Mapper.Map <IEnumerable <QueueList>,
                                                                                                             IEnumerable <QueueListViewModel> >(queueList));
                }
                return(response);
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.ERR_QUE_NO_QUEUE_FOUND, null));
            }
        }
Example #5
0
        public async Task <ResponseViewModel <LaneMgntViewModel> > GetLaneForWarehouseManagement(string code)
        {
            ResponseViewModel <LaneMgntViewModel> responseViewModel = new ResponseViewModel <LaneMgntViewModel>();
            List <LaneMgntViewModel> laneMgntViewModels             = new List <LaneMgntViewModel>();
            var lanes = await _laneRepository.GetManyAsync(ln => ln.loadingBay.code.Equals(code) && ln.isDelete == false, QueryIncludes.LANEFULLINCLUDES);

            foreach (var lane in lanes)
            {
                LaneMgntViewModel laneMgntViewModel = new LaneMgntViewModel();
                laneMgntViewModel.ID       = lane.ID;
                laneMgntViewModel.LaneName = lane.nameVi;
                if (lane.usingStatus == LaneStatus.OCCUPIED)
                {
                    laneMgntViewModel.usingStatus = "Ocuppied";
                }
                else
                {
                    laneMgntViewModel.usingStatus = "Free";
                }
                laneMgntViewModel.status    = lane.status;
                laneMgntViewModel.truckType = lane.truckType.description;
                var queue = await _queueListRepository.GetAsync(qu => qu.laneID == lane.ID && qu.gatePass.isDelete == false && qu.gatePass.stateID == GatepassState.STATE_IN_WAREHOUSE_CHECK_IN, QueryIncludes.QUEUELISTFULLINCLUDES);

                if (queue != null)
                {
                    var gatePass = await _gatePassRepository.GetAsync(gt => gt.ID == queue.gatePass.ID, QueryIncludes.GATEPASSFULLINCLUDES);  // await _gatePassRepository.GetAsync(gt => gt.queueLists.ToArray()[0].laneID == lane.ID && gt.isDelete == false);// && gt.stateID == GatepassState.STATE_FINISH_WAREHOUSE_CHECK_IN);

                    var start = (DateTime)gatePass.enterTime;
                    var end   = (DateTime)gatePass.leaveTime;
                    end = end.AddMonths(1);
                    var now     = DateTime.Now.Ticks;
                    var percent = ((now - start.Ticks) / (end.Ticks - start.Ticks)) * 100;
                    if (percent < (1 / 4))
                    {
                        laneMgntViewModel.progress = "0 %";
                    }
                    else if (percent > (1 / 4) && percent < (1 / 2))
                    {
                        laneMgntViewModel.progress = "50 %";
                    }
                    else if (percent > (1 / 2) && percent < 1)
                    {
                        laneMgntViewModel.progress = "75 %";
                    }
                    else
                    {
                        laneMgntViewModel.progress = "75 %";
                    }
                    laneMgntViewModel.KPI         = gatePass.truck.KPI;
                    laneMgntViewModel.inTime      = (DateTime)gatePass.enterTime;
                    laneMgntViewModel.outTime     = (DateTime)gatePass.leaveTime;
                    laneMgntViewModel.plateNumber = gatePass.truck.plateNumber;
                }
                laneMgntViewModels.Add(laneMgntViewModel);
            }
            responseViewModel = ResponseConstructor <LaneMgntViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, laneMgntViewModels);

            return(responseViewModel);
        }
Example #6
0
        public async Task <ResponseViewModel <GenericResponseModel> > UpdateTruckOnWarehouseCheckIn(TheoryWeighValueModel theoryWeighValueModel)
        {
            ResponseViewModel <GenericResponseModel> response = new ResponseViewModel <GenericResponseModel>();

            try
            {
                if (await _authService.CheckUserPermission(theoryWeighValueModel.employeeID, theoryWeighValueModel.employeeRFID, "UpdateTruckOnWarehouseCheckIn"))
                {
                    var gatePass = await _gatePassRepository.GetAsync(gt => gt.ID == theoryWeighValueModel.gatePassID && gt.isDelete == false);

                    if (gatePass == null)
                    {
                        response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_QUE_NO_GATEPASS_FOUND, false);
                    }
                    else
                    {
                        if (gatePass.stateID == GatepassState.STATE_FINISH_WEIGHT_IN)
                        {
                            gatePass.stateID = GatepassState.STATE_FINISH_WAREHOUSE_CHECK_IN;
                            var queue = await _queueListRepository.GetAsync(qu => qu.gatePassID == gatePass.ID);

                            var lane = await _laneRepository.GetAsync(ln => ln.ID == queue.laneID);

                            lane.usingStatus = LaneStatus.OCCUPIED;
                            _laneRepository.Update(lane);
                            _gatePassRepository.Update(gatePass);
                            if (await _unitOfWork.SaveChangesAsync())
                            {
                                response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.SUCCESS, true);
                            }
                            else
                            {
                                response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false);
                            }
                        }
                        else
                        {
                            response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_QUE_GATEPASS_WRONG_STATE, false);
                        }
                    }
                }
                else
                {
                    response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_USER_PERMISSION, false);
                }
                return(response);
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
            }
        }
        public ResponseViewModel <WeightRecordViewModel> AddTruckCamera(string fileName, byte[] fileContent)
        {
            ResponseViewModel <WeightRecordViewModel> response = new ResponseViewModel <WeightRecordViewModel>();
            string filePath = Constant.DriverCapturePath + fileName;

            // Write to file
            if (fileName == null || fileContent == null)
            {
                response = ResponseConstructor <WeightRecordViewModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false);
            }
            else
            {
                File.WriteAllBytes(filePath, fileContent);
                response = ResponseConstructor <WeightRecordViewModel> .ConstructBoolRes(ResponseCode.SUCCESS, true);
            }
            return(response);
        }
        public async Task <ResponseViewModel <GatePassViewModel> > GetGatePassByRFID(string rfidCode)
        {
            ResponseViewModel <GatePassViewModel> response;
            GatePass          queryGatePassResult;
            GatePassViewModel gatePassViewModel;
            RFIDCard          queryRFIDResult;

            if (_unitOfWork.Exists() == false)
            {
                response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_DB_CONNECTION_FAILED, null);
            }
            else
            {
                // Find RFID ID
                queryRFIDResult = await _rfidCardRepository.GetAsync(r => r.isDelete == false && r.code == rfidCode);

                if (queryRFIDResult == null)
                {
                    // Not found RFID tag on Database
                    response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_NOT_FOUND_RFID, null);
                }
                else
                {
                    // Query Gatepass by RFID tag
                    queryGatePassResult = await _gatePassRepository.GetAsync(
                        g => g.isDelete == false &&
                        g.RFIDCardID == queryRFIDResult.ID, QueryIncludes.SECURITY_GATEPASS_INCLUDES);

                    if (queryGatePassResult == null)
                    {
                        // Not Found Gatepass matched with RFID No
                        response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_NOT_FOUND_GATEPASS, null);
                    }
                    else
                    {
                        // Found the GatePass
                        gatePassViewModel = Mapper.Map <GatePass, GatePassViewModel>(queryGatePassResult);
                        response          = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.SUCCESS, gatePassViewModel);
                    }
                }
            }

            return(response);
        }
Example #9
0
        public async Task <ResponseViewModel <GenericResponseModel> > UpdateTheoryWeighValue(TheoryWeighValueModel theoryWeighValueModel)
        {
            ResponseViewModel <GenericResponseModel> response = new ResponseViewModel <GenericResponseModel>();

            try
            {
                if (await _authService.CheckUserPermission(theoryWeighValueModel.employeeID, theoryWeighValueModel.employeeRFID, "UpdateTheoryWeighValue"))
                {
                    var gatePass = await _gatePassRepository.GetAsync(gt => gt.ID == theoryWeighValueModel.gatePassID && gt.isDelete == false);

                    if (gatePass == null)
                    {
                        response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_QUE_NO_GATEPASS_FOUND, false);
                    }
                    else
                    {
                        gatePass.theoryWeightValue = theoryWeighValueModel.theoryWeighValue;
                        _gatePassRepository.Update(gatePass);
                        if (await _unitOfWork.SaveChangesAsync())
                        {
                            response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.SUCCESS, true);
                        }
                        else
                        {
                            response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false);
                        }
                    }
                }
                else
                {
                    response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_USER_PERMISSION, false);
                }
                return(response);
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <GenericResponseModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false));
            }
        }
        public async Task <ResponseViewModel <WeightRecordViewModel> > GetWeightValueByGatePassID(int gatePassID)
        {
            ResponseViewModel <WeightRecordViewModel> response = new ResponseViewModel <WeightRecordViewModel>();

            try
            {
                var weighRecord = await _weightRecordRepository.GetManyAsync(wt => wt.gatepassID == gatePassID && wt.isDelete == false);

                if (weighRecord == null)
                {
                    response = ResponseConstructor <WeightRecordViewModel> .ConstructEnumerableData(ResponseCode.ERR_QUE_WEIGH_NO_FOUND, Mapper.Map <IEnumerable <WeightRecord>, IEnumerable <WeightRecordViewModel> >(weighRecord));
                }
                else
                {
                    response = ResponseConstructor <WeightRecordViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, Mapper.Map <IEnumerable <WeightRecord>, IEnumerable <WeightRecordViewModel> >(weighRecord));
                }
                return(response);
            }
            catch (Exception)
            {
                return(response = ResponseConstructor <WeightRecordViewModel> .ConstructEnumerableData(ResponseCode.ERR_SEC_UNKNOW, null));
            }
        }
Example #11
0
        public async Task <ResponseViewModel <UserViewModel> > Login(LoginViewModel loginViewModel)
        {
            ResponseViewModel <UserViewModel> response = new ResponseViewModel <UserViewModel>();
            var user = await _userRepository.GetAsync(u => u.username == loginViewModel.Email && u.isDelete == false, QueryIncludes.USERFULLINCLUDES);

            if (user == null)
            {
                return(response = ResponseConstructor <UserViewModel> .ConstructData(ResponseCode.ERR_USER_NOT_EXSIT, null));
            }

            if (user.password != Crypt.ToSha256(loginViewModel.Password))
            {
                return(response = ResponseConstructor <UserViewModel> .ConstructData(ResponseCode.ERR_INVALID_LOGIN, null));
            }

            var token = this.GenerateToken(user.ID, user.username, user.password, loginViewModel.UserHostAddress,
                                           loginViewModel.UserAgent, DateTime.Now.Ticks);
            UserViewModel viewModel = Mapper.Map <User, UserViewModel>(user);

            viewModel.token = token;
            response        = ResponseConstructor <UserViewModel> .ConstructData(ResponseCode.SUCCESS, viewModel);

            return(response);
        }
        public async Task <ResponseViewModel <QueueListViewModel> > GetTrucks(string truckCondition)
        {
            ResponseViewModel <QueueListViewModel> response;
            IEnumerable <QueueList>          queryResult;
            IEnumerable <QueueListViewModel> truckOnQueueViewModel;

            // Check connection to database
            if (_unitOfWork.Exists() == false)
            {
                response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.ERR_DB_CONNECTION_FAILED, null);
            }
            else
            {
                switch (truckCondition)
                {
                case TRUCK_CONDITION_ALL:
                    queryResult = (await _queueListRepository.GetManyAsync(c => c.isDelete == false,
                                                                           QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                case TRUCK_CONDITION_CALLING:
                    queryResult = (await _queueListRepository.GetManyAsync(c =>
                                                                           c.isDelete == false &&
                                                                           (c.gatePass.state.ID == GatepassState.STATE_CALLING_1 ||
                                                                            c.gatePass.state.ID == GatepassState.STATE_CALLING_2 ||
                                                                            c.gatePass.state.ID == GatepassState.STATE_CALLING_3
                                                                           ),
                                                                           QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                case TRUCK_CONDITION_WAITING_CALL:
                    queryResult = (await _queueListRepository.GetManyAsync(c =>
                                                                           c.isDelete == false &&
                                                                           (
                                                                               c.gatePass.state.ID == GatepassState.STATE_REGISTERED
                                                                           ), QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                case TRUCK_CONDITION_1XXX_WAITING_CALL:
                    queryResult = (await _queueListRepository.GetManyAsync(c =>
                                                                           c.isDelete == false &&
                                                                           (
                                                                               c.gatePass.state.ID == GatepassState.STATE_REGISTERED
                                                                           ) &&
                                                                           c.gatePass.truckGroup.Code == TruckGroups.GROUP_1XXX,
                                                                           QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                case TRUCK_CONDITION_2XXX_WAITING_CALL:
                    queryResult = (await _queueListRepository.GetManyAsync(c =>
                                                                           c.isDelete == false &&
                                                                           (
                                                                               c.gatePass.state.ID == GatepassState.STATE_REGISTERED
                                                                           ) &&
                                                                           c.gatePass.truckGroup.Code == TruckGroups.GROUP_2XXX,
                                                                           QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                case TRUCK_CONDITION_3XXX_WAITING_CALL:
                    queryResult = (await _queueListRepository.GetManyAsync(c =>
                                                                           c.isDelete == false &&
                                                                           (
                                                                               c.gatePass.state.ID == GatepassState.STATE_REGISTERED
                                                                           ) &&
                                                                           c.gatePass.truckGroup.Code == TruckGroups.GROUP_3XXX,
                                                                           QueryIncludes.SECURITY_QUEUE_INCLUDES)
                                   ).ToArray().OrderBy(q => q.queueOrder).ToList();

                    truckOnQueueViewModel = Mapper.Map <IEnumerable <QueueList>, IEnumerable <QueueListViewModel> >(queryResult);
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.SUCCESS, truckOnQueueViewModel);

                    break;

                default:
                    response = ResponseConstructor <QueueListViewModel> .ConstructEnumerableData(ResponseCode.ERR_SEC_NOT_SUPPORT_CONDITION, null);

                    break;
                }
            }

            return(response);
        }
        public async Task <ResponseViewModel <GatePassViewModel> > ConfirmSecurityCheck(SecurityUpdateStateViewModel updateStateView)
        {
            ResponseViewModel <GatePassViewModel> response;
            GatePass          queryGatePassResult;
            GatePassViewModel gatePassViewModel;
            State             queryStateResult;
            int tmpResponseCode;

            if (_unitOfWork.Exists() == false)
            {
                // Cound Not Connect to Database
                response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_DB_CONNECTION_FAILED, null);
            }
            else if (updateStateView == null)
            {
                // Wrong request format
                response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_WRONG_BODY_REQUEST_FORMAT, null);
            }
            else
            {
                // Get Queue by gatePassCode from database
                queryGatePassResult = await _gatePassRepository.GetAsync(q =>
                                                                         q.isDelete == false &&
                                                                         q.code == updateStateView.gatePassCode, QueryIncludes.SECURITY_GATEPASS_INCLUDES);

                // @TODO: Get permission of confirm RFID
                //
                bool isConfirmPermited = true;

                if (queryGatePassResult == null)
                {
                    // Not found GatePass
                    response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_NOT_FOUND_GATEPASS, null);
                }
                else if (queryGatePassResult.state == null)
                {
                    // GatePass lacked "stateID" property
                    response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_GATEPASS_LACK_STATEID, null);
                }
                else
                {
                    // Found the GatePass and State
                    if (isConfirmPermited == false)
                    {
                        // Not Permit
                        tmpResponseCode = ResponseCode.ERR_SEC_WRONG_CONFIRMED_RFID;
                    }
                    else
                    {
                        // Check requested updated state
                        switch (queryGatePassResult.state.ID)
                        {
                        case GatepassState.STATE_CALLING_1:
                        case GatepassState.STATE_CALLING_2:
                        case GatepassState.STATE_CALLING_3:
                        case GatepassState.STATE_IN_SECURITY_CHECK_IN:
                            // Get state ID of "Finish security check-in"
                            queryStateResult = await _stateRepository.GetAsync(s => s.ID == GatepassState.STATE_FINISH_SECURITY_CHECK_IN);     // STATE_SECURITY_CHECK_IN);

                            // Updat gatepass/state
                            queryGatePassResult.stateID   = queryStateResult.ID;
                            queryGatePassResult.enterTime = DateTime.Now;
                            tmpResponseCode = ResponseCode.SUCCESS;
                            break;

                        case GatepassState.STATE_FINISH_WEIGHT_OUT:
                            // Get state ID of "Finish security check-out"
                            queryStateResult = await _stateRepository.GetAsync(s => s.ID == GatepassState.STATE_FINISH_SECURITY_CHECK_OUT);     // STATE_SECURITY_CHECK_OUT);

                            // Updat gatepass/state
                            queryGatePassResult.stateID   = queryStateResult.ID;
                            queryGatePassResult.leaveTime = DateTime.Now;
                            queryGatePassResult.isDelete  = true;
                            queryGatePassResult.queueLists.First().isDelete = true;
                            if (queryGatePassResult.orders != null && queryGatePassResult.orders.Count > 0)
                            {
                                foreach (Order order in queryGatePassResult.orders)
                                {
                                    order.isDelete = true;
                                }
                            }
                            tmpResponseCode = ResponseCode.SUCCESS;
                            break;

                        default:
                            // NOT SUPPORT STATE
                            tmpResponseCode = ResponseCode.ERR_SEC_NOT_PERMIT_PASS_SECURITY_GATE;
                            break;
                        }
                    }

                    // Save on database
                    _unitOfWork.SaveChanges();

                    // @TODO: Update state record

                    // Re-query after changing
                    queryGatePassResult = await _gatePassRepository.GetAsync(q => q.code == updateStateView.gatePassCode, QueryIncludes.SECURITY_GATEPASS_INCLUDES);

                    gatePassViewModel = Mapper.Map <GatePass, GatePassViewModel>(queryGatePassResult);

                    // Return gatepass/truck
                    response = ResponseConstructor <GatePassViewModel> .ConstructData(tmpResponseCode, gatePassViewModel);
                }
            }
            return(response);
        }
        public async Task <ResponseViewModel <GatePassViewModel> > RegisterSecurityCheck(string rfidCode)
        {
            ResponseViewModel <GatePassViewModel> response;
            GatePass          queryGatePassResult;
            GatePassViewModel GatePassViewModel;
            RFIDCard          queryRfidResult;

            int tmpResponseCode;

            if (_unitOfWork.Exists() == false)
            {
                // Cound Not Connect to Database
                response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_DB_CONNECTION_FAILED, null);
            }
            else
            {
                // Find RFID
                queryRfidResult = await _rfidCardRepository.GetAsync(r => r.isDelete == false && r.code == rfidCode);

                if (queryRfidResult == null)
                {
                    // Not found RFID card ID
                    response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_NOT_FOUND_RFID, null);
                }
                else
                {
                    // Find GatePass
                    queryGatePassResult = await _gatePassRepository.GetAsync(
                        g => g.isDelete == false &&
                        g.RFIDCardID == queryRfidResult.ID, QueryIncludes.SECURITY_GATEPASS_INCLUDES);

                    if (queryGatePassResult == null)
                    {
                        // Not Found Gatepass matched with RFID No
                        response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_NOT_FOUND_GATEPASS, null);
                    }
                    else if (queryGatePassResult.state == null)
                    {
                        // GatePass lacked "stateID" property
                        response = ResponseConstructor <GatePassViewModel> .ConstructData(ResponseCode.ERR_SEC_GATEPASS_LACK_STATEID, null);
                    }
                    else
                    {
                        // Check Truck state and Update its
                        switch (queryGatePassResult.state.ID)
                        {
                        case GatepassState.STATE_CALLING_1:
                        case GatepassState.STATE_CALLING_2:
                        case GatepassState.STATE_CALLING_3:
                            tmpResponseCode = ResponseCode.SUCCESS;
                            break;

                        case GatepassState.STATE_FINISH_WEIGHT_OUT:     //STATE_WEIGHT_OUT:
                            tmpResponseCode = ResponseCode.SUCCESS;
                            break;

                        default:
                            tmpResponseCode = ResponseCode.ERR_SEC_NOT_PERMITTED_REG;
                            break;
                        }

                        GatePassViewModel = Mapper.Map <GatePass, GatePassViewModel>(queryGatePassResult);

                        // Return gatepass/truck
                        response = ResponseConstructor <GatePassViewModel> .ConstructData(tmpResponseCode, GatePassViewModel);
                    }
                }
            }

            return(response);
        }
        public async Task <ResponseViewModel <QueueListViewModel> > CallNextTruck(int truckGroupID)
        {
            ResponseViewModel <QueueListViewModel> response = new ResponseViewModel <QueueListViewModel>();
            var queues = await _queueListRepository.GetManyAsync(qu => qu.gatePass.truckGroupID == truckGroupID && qu.isDelete == false, QueryIncludes.QUEUELISTFULLINCLUDES);

            var firstqueue = queues.OrderBy(q => q.queueNumber).First();
            var gatePass   = await _gatePassRepository.GetAsync(gt => gt.ID == firstqueue.gatePassID && gt.isDelete == false, QueryIncludes.GATEPASSFULLINCLUDES);

            if (gatePass == null)
            {
                response = ResponseConstructor <QueueListViewModel> .ConstructBoolRes(ResponseCode.ERR_QUE_NO_QUEUE_FOUND, false);
            }
            else
            {
                // Change GatePass state
                switch (gatePass.stateID)
                {
                case GatepassState.STATE_REGISTERED:
                    gatePass.stateID = GatepassState.STATE_CALLING_1;
                    break;

                case GatepassState.STATE_CALLING_1:
                    gatePass.stateID = GatepassState.STATE_CALLING_2;
                    break;

                case GatepassState.STATE_CALLING_2:
                    gatePass.stateID = GatepassState.STATE_CALLING_3;
                    break;

                case GatepassState.STATE_CALLING_3:
                    // Update state & Update queueList
                    gatePass.stateID = GatepassState.STATE_REGISTERED;
                    var currentQueue = await _queueListRepository.GetAsync(qu => qu.gatePassID == gatePass.ID && qu.isDelete == false);

                    var queueList = await _queueListRepository.GetManyAsync(qu => qu.queueNumber > currentQueue.queueNumber && qu.queueNumber <= (currentQueue.queueNumber + 5) && qu.gatePass.truckGroup.ID == gatePass.truckGroup.ID && qu.isDelete == false);

                    // If there are less than 5 - move to the last
                    if (queueList.Count() < 5)
                    {
                        // Set new Order
                        currentQueue.queueNumber += queueList.Count();
                        // Shift up 1 item for orther QueueItem
                        foreach (var queueItem in queueList)
                        {
                            queueItem.queueNumber -= 1;
                            _queueListRepository.Update(queueItem);
                        }
                    }
                    else      // If more than 5 - move down 5
                    {
                        // Set new order
                        currentQueue.queueNumber += 5;
                        // Shift up 1 item for orther QueueItem
                        foreach (var queueItem in queueList)
                        {
                            queueItem.queueNumber -= 1;
                            _queueListRepository.Update(queueItem);
                        }
                    }
                    break;

                default:
                    return(response = ResponseConstructor <QueueListViewModel> .ConstructBoolRes(ResponseCode.ERR_QUE_NO_QUEUE_FOUND, false));
                }
                _gatePassRepository.Update(gatePass);
                if (await _unitOfWork.SaveChangesAsync())
                {
                    response = ResponseConstructor <QueueListViewModel> .ConstructBoolRes(ResponseCode.SUCCESS, true);
                }
                else
                {
                    response = ResponseConstructor <QueueListViewModel> .ConstructBoolRes(ResponseCode.ERR_SEC_UNKNOW, false);
                }
            }
            return(response);
        }