Subversion Repositories SmartDukaan

Rev

Rev 23784 | Blame | Last modification | View Log | RSS feed

package com.spice.profitmandi.web.controller;

import java.util.HashSet;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
import com.spice.profitmandi.common.model.CreateWarehouseRequest;
import com.spice.profitmandi.common.model.ProfitMandiConstants;
import com.spice.profitmandi.common.util.Utils;
import com.spice.profitmandi.dao.entity.dtr.User;
import com.spice.profitmandi.dao.entity.nonbillable.Warehouse;
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
import com.spice.profitmandi.dao.repository.nonbillable.UserWarehouseRepository;
import com.spice.profitmandi.dao.repository.nonbillable.WarehouseRepository;
import com.spice.profitmandi.service.nonbillable.WarehouseService;

@Controller
@Transactional
public class WarehouseController {
        
        private static final Logger LOGGER = LogManager.getLogger(WarehouseController.class);
        
        @Autowired
        private WarehouseRepository warehouseRepository;
        
        @Autowired
        private WarehouseService warehouseService;
        
        @Autowired
        @Qualifier("userRepository")
        private UserRepository userRepository;
        
        @Autowired
        private UserAccountRepository userAccountRepository;
        
        @Autowired
        private UserWarehouseRepository userWarehouseRepository;
        
        @RequestMapping(value = "/createWarehouse", method = RequestMethod.GET)
        public String createWarehouse(HttpServletRequest request, Model model) {
                model.addAttribute("stateNames", Utils.getAllStateNames());
                return "create-warehouse";
        }
        
        @RequestMapping(value = "/createWarehouse", method = RequestMethod.POST)
        public String createWarehouse(HttpServletRequest request, @RequestBody CreateWarehouseRequest createWarehouseRequest, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
                LOGGER.info("Request Received at url {} with body {}", request.getRequestURI(), createWarehouseRequest);
                warehouseService.createWarehouse(createWarehouseRequest);
                List<Warehouse> warehouses = warehouseRepository.selectAll(offset, limit);
                long size = warehouseRepository.selectAllCount();
                model.addAttribute("warehouses", warehouses);
                model.addAttribute("start", offset + 1);
                model.addAttribute("size", size);
                if (warehouses.size() < limit){
                        model.addAttribute("end", offset + warehouses.size());
                }else{
                        model.addAttribute("end", offset + limit);
                }
                return "warehouses";
        }
        
        @RequestMapping(value = "/getWarehouses", method = RequestMethod.GET)
        public String getWarehouses(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
                List<Warehouse> warehouses = warehouseRepository.selectAll(offset, limit);
                long size = warehouseRepository.selectAllCount();
                model.addAttribute("warehouses", warehouses);
                model.addAttribute("start", offset + 1);
                model.addAttribute("size", size);
                if (warehouses.size() < limit){
                        model.addAttribute("end", offset + warehouses.size());
                }else{
                        model.addAttribute("end", offset + limit);
                }
                return "warehouses";
        }
        
        @RequestMapping(value = "/getPaginatedWarehouses", method = RequestMethod.GET)
        public String getPaginatedWarehouses(HttpServletRequest request, @RequestParam(name = "offset", defaultValue = "0") int offset, @RequestParam(name = "limit", defaultValue = "10") int limit, Model model) throws ProfitMandiBusinessException{
                List<Warehouse> warehouses = warehouseRepository.selectAll(offset, limit);
                model.addAttribute("warehouses", warehouses);
                return "warehouses-paginated";
        }
        
        @RequestMapping(value = "/getAddRemoveWarehouse", method = RequestMethod.GET)
        public String getAddRemoveWarehouse(HttpServletRequest request) {
                return "add-remove-warehouse";
        }
        
        @RequestMapping(value = "/userWarehouses", method = RequestMethod.GET)
        public String userWarehouses(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.EMAIL_ID_OR_MOBILE_NUMBER) String emailIdOrMobileNumber, Model model)  throws Exception{
                User user = userRepository.selectByEmailIdOrMobileNumber(emailIdOrMobileNumber);
                int retailerId = userAccountRepository.selectRetailerIdByUserId(user.getId());
                List<Integer> warehouseIds = userWarehouseRepository.selectWarehouseIdsByUserId(retailerId);
                List<Warehouse> warehouses = warehouseRepository.selectAll();
                model.addAttribute("userWarehouseIds", warehouseIds);
                model.addAttribute("warehouses", warehouses);
                return "user-warehouses";
        }
        
        @RequestMapping(value = "/addRemoveWarehouses", method = RequestMethod.POST)
        public String addRemoveRoles(HttpServletRequest request, @RequestParam(name = ProfitMandiConstants.EMAIL_ID_OR_MOBILE_NUMBER) String emailIdOrMobileNumber, @RequestBody List<Integer> warehouseIds, Model model)  throws Exception{
                warehouseService.addRemoveWarehouses(emailIdOrMobileNumber, new HashSet<>(warehouseIds));
                return "add-remove-warehouse";
        }
        
}