Subversion Repositories SmartDukaan

Rev

Rev 36015 | Rev 37823 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
28300 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
32539 amit.gupta 3
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28493 tejbeer 4
import com.spice.profitmandi.dao.entity.inventory.State;
5
import com.spice.profitmandi.dao.entity.inventory.Vendor;
34329 aman.kumar 6
import com.spice.profitmandi.dao.entity.inventory.Warehouse;
31238 amit.gupta 7
import com.spice.profitmandi.dao.entity.transaction.Seller;
8
import com.spice.profitmandi.dao.entity.transaction.SellerWarehouse;
9
import com.spice.profitmandi.dao.entity.transaction.WarehouseAddressMapping;
10
import com.spice.profitmandi.dao.entity.transaction.WarehouseAddressMaster;
28300 tejbeer 11
import com.spice.profitmandi.dao.entity.warehouse.Supplier;
28493 tejbeer 12
import com.spice.profitmandi.dao.enumuration.inventory.InventoryType;
13
import com.spice.profitmandi.dao.enumuration.inventory.WarehouseType;
14
import com.spice.profitmandi.dao.hrms.CreateNewSupplier;
15
import com.spice.profitmandi.dao.hrms.WarehouseIdPrefixModel;
34329 aman.kumar 16
import com.spice.profitmandi.dao.model.hdfc.SupplierFormData;
28493 tejbeer 17
import com.spice.profitmandi.dao.repository.inventory.StateRepository;
18
import com.spice.profitmandi.dao.repository.inventory.VendorRepository;
34329 aman.kumar 19
import com.spice.profitmandi.dao.repository.inventory.WarehouseRepository;
28493 tejbeer 20
import com.spice.profitmandi.dao.repository.transaction.SellerRepository;
21
import com.spice.profitmandi.dao.repository.transaction.SellerWarehouseRepository;
32383 amit.gupta 22
import com.spice.profitmandi.dao.repository.transaction.WarehouseAddressMappingRepository;
23
import com.spice.profitmandi.dao.repository.transaction.WarehouseAddressMasterRepository;
28300 tejbeer 24
import com.spice.profitmandi.dao.repository.warehouse.SupplierRepository;
37770 amit 25
import com.spice.profitmandi.service.warehouse.SupplierStateResolver;
28493 tejbeer 26
import com.spice.profitmandi.service.warehouse.WarehouseService;
28300 tejbeer 27
import com.spice.profitmandi.web.util.MVCResponseSender;
31238 amit.gupta 28
import org.apache.logging.log4j.LogManager;
29
import org.apache.logging.log4j.Logger;
30
import org.springframework.beans.factory.annotation.Autowired;
31
import org.springframework.stereotype.Controller;
32
import org.springframework.transaction.annotation.Transactional;
33
import org.springframework.ui.Model;
32565 tejbeer 34
import org.springframework.web.bind.annotation.*;
28300 tejbeer 35
 
31238 amit.gupta 36
import javax.servlet.http.HttpServletRequest;
37
import java.util.HashMap;
38
import java.util.List;
39
import java.util.Map;
40
import java.util.stream.Collectors;
28493 tejbeer 41
 
28300 tejbeer 42
@Controller
43
@Transactional(rollbackFor = Throwable.class)
44
public class SupplierController {
28493 tejbeer 45
 
32075 tejbeer 46
    @Autowired
47
    private SupplierRepository supplierRepository;
28300 tejbeer 48
 
32075 tejbeer 49
    @Autowired
37770 amit 50
    private SupplierStateResolver supplierStateResolver;
51
 
52
    @Autowired
32075 tejbeer 53
    private MVCResponseSender mvcResponseSender;
28300 tejbeer 54
 
28493 tejbeer 55
 
32075 tejbeer 56
    @Autowired
57
    private SellerRepository sellerRepository;
28493 tejbeer 58
 
32075 tejbeer 59
    @Autowired
60
    private WarehouseService warehouseService;
28493 tejbeer 61
 
32075 tejbeer 62
    @Autowired
63
    private SellerWarehouseRepository sellerWarehouseRepository;
28493 tejbeer 64
 
32075 tejbeer 65
    @Autowired
66
    private VendorRepository vendorRepository;
28493 tejbeer 67
 
32075 tejbeer 68
    @Autowired
32383 amit.gupta 69
    private WarehouseAddressMappingRepository warehouseAddressMappingRepository;
28493 tejbeer 70
 
32075 tejbeer 71
    @Autowired
32383 amit.gupta 72
    private WarehouseAddressMasterRepository warehouseAddressMasterRepository;
28493 tejbeer 73
 
32075 tejbeer 74
    @Autowired
75
    private StateRepository stateRepository;
28493 tejbeer 76
 
32075 tejbeer 77
    private static final Logger LOGGER = LogManager.getLogger(SupplierController.class);
28493 tejbeer 78
 
34329 aman.kumar 79
    @Autowired
80
    WarehouseRepository warehouseRepository;
28493 tejbeer 81
 
32075 tejbeer 82
    @RequestMapping(value = "/getAllInActiveSupplier", method = RequestMethod.GET)
83
    public String getShowInActiveSupplier(HttpServletRequest request, Model model) throws Exception {
28493 tejbeer 84
 
32075 tejbeer 85
        List<Supplier> supplierInactives = supplierRepository.selectByStatus(false);
28493 tejbeer 86
 
32075 tejbeer 87
        model.addAttribute("supplierInactives", supplierInactives);
28493 tejbeer 88
 
32075 tejbeer 89
        LOGGER.info("supplierInactives" + supplierInactives);
28300 tejbeer 90
 
32075 tejbeer 91
        return "supplier-in-active";
28300 tejbeer 92
 
32075 tejbeer 93
    }
28493 tejbeer 94
 
34329 aman.kumar 95
    @RequestMapping(value = "/getAllSupplier", method = RequestMethod.GET)
96
    public String getShowSupplier(HttpServletRequest request, Model model) throws Exception {
97
 
98
        List<Supplier> supplierAcvtives = supplierRepository.selectByStatus(true);
99
 
32565 tejbeer 100
        List<SellerWarehouse> sellerWarehouses = sellerWarehouseRepository.selectAll();
101
        List<Integer> sellerwarehouseIds = sellerWarehouses.stream().map(x -> x.getWarehouseId()).collect(Collectors.toList());
102
        LOGGER.info("sellerWarehouses" + sellerWarehouses);
103
        Map<Integer, WarehouseIdPrefixModel> warehouseIdAndState = new HashMap<>();
104
 
105
        for (SellerWarehouse sw : sellerWarehouses) {
106
 
107
            WarehouseAddressMapping warehouseAddressMapping = warehouseAddressMappingRepository.selectByWarehouseId(sw.getWarehouseId());
108
            LOGGER.info("warehouseAddressMapping" + warehouseAddressMapping);
109
            if (warehouseAddressMapping != null) {
110
                WarehouseAddressMaster WarehouseAddressMaster = warehouseAddressMasterRepository.selectById(warehouseAddressMapping.getAddressId());
111
                LOGGER.info("warehouseAddressMappingAddreesId" + warehouseAddressMapping.getAddressId());
112
                LOGGER.info("WarehouseAddressMaster" + WarehouseAddressMaster);
113
                State state = stateRepository.selectById(WarehouseAddressMaster.getStateId());
114
                WarehouseIdPrefixModel wp = new WarehouseIdPrefixModel();
115
                wp.setPrefix(sw.getPrefix());
116
                wp.setStateName(state.getName());
117
                warehouseIdAndState.put(sw.getWarehouseId(), wp);
118
                LOGGER.info("state" + state);
119
            }
120
        }
121
        LOGGER.info("warehouseIdAndState" + warehouseIdAndState);
122
        model.addAttribute("warehouseIdAndState", warehouseIdAndState);
123
 
124
        List<State> state = stateRepository.selectAll();
125
 
34329 aman.kumar 126
        model.addAttribute("suppliers", supplierAcvtives);
127
        model.addAttribute("response1", mvcResponseSender.createResponseString(supplierAcvtives));
32565 tejbeer 128
        model.addAttribute("state", state);
34329 aman.kumar 129
 
130
        return "supplier";
131
 
32565 tejbeer 132
    }
133
 
34329 aman.kumar 134
 
32075 tejbeer 135
    @RequestMapping(value = "/getCreateNewSupplier", method = RequestMethod.GET)
136
    public String getCreateNewSupplier(HttpServletRequest request, Model model) throws Exception {
32539 amit.gupta 137
        List<SellerWarehouse> sellerWarehouses = sellerWarehouseRepository.selectAll();
138
        Map<Integer, String> warehouseMap = ProfitMandiConstants.WAREHOUSE_MAP;
139
        sellerWarehouses = sellerWarehouses.stream().filter(x -> warehouseMap.containsKey(x.getWarehouseId())).collect(Collectors.toList());
28493 tejbeer 140
 
32075 tejbeer 141
        Map<Integer, WarehouseIdPrefixModel> warehouseIdAndState = new HashMap<>();
28493 tejbeer 142
 
32075 tejbeer 143
        for (SellerWarehouse sw : sellerWarehouses) {
32383 amit.gupta 144
            WarehouseAddressMapping warehouseAddressMapping = warehouseAddressMappingRepository.selectByWarehouseId(sw.getWarehouseId());
32075 tejbeer 145
            LOGGER.info("warehouseAddressMapping" + warehouseAddressMapping);
146
            if (warehouseAddressMapping != null) {
32383 amit.gupta 147
                WarehouseAddressMaster WarehouseAddressMaster = warehouseAddressMasterRepository.selectById(warehouseAddressMapping.getAddressId());
32075 tejbeer 148
                LOGGER.info("warehouseAddressMappingAddreesId" + warehouseAddressMapping.getAddressId());
149
                LOGGER.info("WarehouseAddressMaster" + WarehouseAddressMaster);
150
                State state = stateRepository.selectById(WarehouseAddressMaster.getStateId());
151
                WarehouseIdPrefixModel wp = new WarehouseIdPrefixModel();
152
                wp.setPrefix(sw.getPrefix());
153
                wp.setStateName(state.getName());
154
                warehouseIdAndState.put(sw.getWarehouseId(), wp);
155
                LOGGER.info("state" + state);
156
            }
157
        }
158
        LOGGER.info("warehouseIdAndState" + warehouseIdAndState);
159
        model.addAttribute("warehouseIdAndState", warehouseIdAndState);
28493 tejbeer 160
 
32075 tejbeer 161
        List<State> state = stateRepository.selectAll();
28493 tejbeer 162
 
32075 tejbeer 163
        model.addAttribute("state", state);
32565 tejbeer 164
        model.addAttribute("warehouseMap", ProfitMandiConstants.WAREHOUSE_MAP);
28493 tejbeer 165
 
32075 tejbeer 166
        return "new-supplier";
167
    }
28493 tejbeer 168
 
32075 tejbeer 169
    @RequestMapping(value = "/setStatusInActive", method = RequestMethod.POST)
170
    public String setInActiveSupplier(HttpServletRequest request, @RequestParam(name = "id", required = true, defaultValue = "0") int id, Model model) throws Exception {
28493 tejbeer 171
 
32075 tejbeer 172
        Supplier supplier = supplierRepository.selectById(id);
28493 tejbeer 173
 
32075 tejbeer 174
        supplier.setStatus(false);
28493 tejbeer 175
 
32075 tejbeer 176
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28493 tejbeer 177
 
32075 tejbeer 178
        return "response";
179
    }
28493 tejbeer 180
 
32075 tejbeer 181
    @RequestMapping(value = "/setStatusActive", method = RequestMethod.POST)
182
    public String setActiveSupplier(HttpServletRequest request, @RequestParam(name = "id", required = true, defaultValue = "0") int id, Model model) throws Exception {
28493 tejbeer 183
 
32075 tejbeer 184
        Supplier supplier = supplierRepository.selectById(id);
28493 tejbeer 185
 
32075 tejbeer 186
        supplier.setStatus(true);
28493 tejbeer 187
 
32075 tejbeer 188
        model.addAttribute("response1", mvcResponseSender.createResponseString(true));
28493 tejbeer 189
 
32075 tejbeer 190
        return "response";
28493 tejbeer 191
 
32075 tejbeer 192
    }
28493 tejbeer 193
 
32075 tejbeer 194
    @RequestMapping(value = "/submitNewSupplier", method = RequestMethod.POST)
195
    public String getCreateNewSupplier(HttpServletRequest request, @RequestBody CreateNewSupplier createNewSupplier, Model model) throws Exception {
28493 tejbeer 196
 
32075 tejbeer 197
        Supplier supplier = new Supplier();
28493 tejbeer 198
 
32075 tejbeer 199
        supplier.setName(createNewSupplier.getName());
200
        supplier.setCommunicationAddress(createNewSupplier.getCommunicationAddress());
201
        supplier.setContactEmail(createNewSupplier.getContactEmail());
202
        supplier.setContactFax(createNewSupplier.getContactFax());
203
        supplier.setContactName(createNewSupplier.getContactPerson());
32565 tejbeer 204
 
205
        supplier.setContactPhone(createNewSupplier.getContactPhone());
32075 tejbeer 206
        supplier.setHeadDesignation(createNewSupplier.getHeadDesign());
207
        supplier.setHeadEmail(createNewSupplier.getHeadEmail());
208
        supplier.setHeadName(createNewSupplier.getHeadName());
209
        supplier.setPan(createNewSupplier.getPan());
210
        supplier.setPhone(createNewSupplier.getPhone());
211
        supplier.setPoValidityLimit(createNewSupplier.getpOValidityLimit());
212
        supplier.setRegisteredAddress(createNewSupplier.getRegisteredAddress());
37770 amit 213
        supplierStateResolver.applyGstinAndState(supplier, createNewSupplier.getGst(), createNewSupplier.getState());
32565 tejbeer 214
        supplier.setInternalWarehouseId(createNewSupplier.getInternalWarehouseId());
32075 tejbeer 215
        supplierRepository.persist(supplier);
28493 tejbeer 216
 
32075 tejbeer 217
        Vendor vendor = new Vendor();
218
        vendor.setName(supplier.getName());
219
        vendor.setId(supplier.getId());
220
        vendorRepository.persist(vendor);
221
        LOGGER.info("supplierId" + supplier.getId());
222
        LOGGER.info("vendorId" + vendor.getId());
28493 tejbeer 223
 
32383 amit.gupta 224
        List<WarehouseAddressMapping> warehouseAddressMappings = warehouseAddressMappingRepository.selectAllByIds(createNewSupplier.getWarehouseId());
32075 tejbeer 225
        LOGGER.info("warehouseAddressMappings" + warehouseAddressMappings);
28493 tejbeer 226
 
32075 tejbeer 227
        for (WarehouseAddressMapping wamp : warehouseAddressMappings) {
228
            List<SellerWarehouse> sellerWarehouse = sellerWarehouseRepository.selectBywarehouseId(wamp.getWarehouseId());
229
            for (SellerWarehouse sw : sellerWarehouse) {
230
                Seller seller = sellerRepository.selectById(sw.getSellerId());
28493 tejbeer 231
 
32383 amit.gupta 232
                WarehouseAddressMaster wam = warehouseAddressMasterRepository.selectById(wamp.getAddressId());
28493 tejbeer 233
 
32075 tejbeer 234
                // GOOD - WarehouseType.OURS, InventoryType.GOOD
235
                warehouseService.createVendorWarehouse(WarehouseType.OURS, InventoryType.GOOD, seller.getLabel(), wamp.getWarehouseId(), wam, vendor.getId());
28493 tejbeer 236
 
32075 tejbeer 237
                // BAD - WarehouseType.OURS, InventoryType.BAD
238
                warehouseService.createVendorWarehouse(WarehouseType.OURS, InventoryType.BAD, seller.getLabel(), wamp.getWarehouseId(), wam, vendor.getId());
28493 tejbeer 239
 
32075 tejbeer 240
                // VIRTUAL - WarehouseType.THIRD_PARTY, InventoryType.GOOD
32371 amit.gupta 241
                warehouseService.createVendorWarehouse(WarehouseType.THIRD_PARTY, InventoryType.GOOD, seller.getLabel(), wamp.getWarehouseId(), wam, vendor.getId());
28493 tejbeer 242
 
32075 tejbeer 243
            }
28493 tejbeer 244
 
32075 tejbeer 245
        }
28493 tejbeer 246
 
32565 tejbeer 247
        //model.addAttribute("response1", mvcResponseSender.createResponseString(true));
32075 tejbeer 248
 
32565 tejbeer 249
        return getShowInActiveSupplier(request, model);
250
 
32075 tejbeer 251
    }
34329 aman.kumar 252
 
253
    @RequestMapping(value = "/supplier/edit/{supplierId}", method = RequestMethod.GET)
254
    public String getEditSupplier(HttpServletRequest request, Model model, @PathVariable int supplierId) throws Exception {
255
        Supplier supplier  = supplierRepository.selectById(supplierId);
256
        List<SellerWarehouse> sellerWarehouses = sellerWarehouseRepository.selectAll();
257
        Map<Integer, WarehouseIdPrefixModel> warehouseIdAndState = new HashMap<>();
258
 
259
        List<Warehouse> supplierWarehouses = warehouseRepository.selectVendorWarehouses(supplierId, WarehouseType.OURS, InventoryType.GOOD);
260
        List<Integer> supplierPhysicalWarehouseIds = supplierWarehouses.stream().map(x -> x.getShippingWarehouseId()).collect(Collectors.toList());
261
        LOGGER.info("supplierPhysicalWarehouseIds" + supplierPhysicalWarehouseIds);
262
        for (SellerWarehouse sw : sellerWarehouses) {
263
            WarehouseAddressMapping warehouseAddressMapping = warehouseAddressMappingRepository.selectByWarehouseId(sw.getWarehouseId());
264
            if (warehouseAddressMapping != null) {
265
                WarehouseAddressMaster WarehouseAddressMaster = warehouseAddressMasterRepository.selectById(warehouseAddressMapping.getAddressId());
266
                State state = stateRepository.selectById(WarehouseAddressMaster.getStateId());
267
                WarehouseIdPrefixModel wp = new WarehouseIdPrefixModel();
268
                wp.setPrefix(sw.getPrefix());
269
                wp.setStateName(state.getName());
270
                warehouseIdAndState.put(sw.getWarehouseId(), wp);
271
            }
272
        }
273
        LOGGER.info("warehouseIdAndState" + warehouseIdAndState);
274
        model.addAttribute("warehouseIdAndState", warehouseIdAndState);
275
 
276
        List<State> state = stateRepository.selectAll();
277
 
278
        model.addAttribute("state", state);
279
        model.addAttribute("warehouseMap", ProfitMandiConstants.WAREHOUSE_MAP);
280
        model.addAttribute("supplier", supplier);
281
        model.addAttribute("supplierPhysicalWarehouseIds", supplierPhysicalWarehouseIds);
282
        return "edit-supplier";
283
    }
284
 
285
    @RequestMapping(value = "/supplier/update/{supplierId}", method = RequestMethod.POST)
286
    public String updateSupplier(@PathVariable("supplierId") int supplierId,
287
                                 @RequestBody SupplierFormData supplierFormData,
288
                                 Model model) throws Exception {
289
        LOGGER.info("supplierFormDataaaa - " + supplierFormData);
290
 
291
        Supplier supplier = supplierRepository.selectById(supplierId);
292
        supplier.setContactPhone(supplierFormData.getInputPhone());
293
        supplier.setPan(supplierFormData.getInputPan());
294
        supplier.setFax(supplierFormData.getInputFax());
295
        supplier.setHeadName(supplierFormData.getInputHeadName());
296
        supplier.setHeadDesignation(supplierFormData.getInputHeadDesign());
297
        supplier.setHeadEmail(supplierFormData.getInputHeadEmail());
298
        supplier.setContactName(supplierFormData.getInputContactPerson());
299
        supplier.setContactPhone(supplierFormData.getInputContactPhone());
300
        supplier.setContactEmail(supplierFormData.getInputContactEmail());
301
        supplier.setFax((supplierFormData.getInputFax()));
302
        supplier.setRegisteredAddress(supplierFormData.getInputRegisteredAddress());
303
        supplier.setCommunicationAddress(supplierFormData.getInputCommunicationAddress());
304
        supplier.setTnc(supplierFormData.getInputTermConditions());
305
        supplier.setInternalWarehouseId(supplierFormData.getInternalWarehouseId());
36015 amit 306
        if (supplierFormData.getInternalWarehouseId() != null && supplierFormData.getInternalWarehouseId() > 0) {
307
            supplier.setInternal(true);
308
        } else {
36013 ranu 309
            supplier.setInternal(false);
36015 amit 310
            supplier.setInternalWarehouseId(null);
36013 ranu 311
        }
37770 amit 312
        supplierStateResolver.applyGstinAndState(supplier, supplierFormData.getInputGst(), supplierFormData.getStateId());
34329 aman.kumar 313
        supplier.setPoValidityLimit(supplierFormData.getInputPOValidityLimit());
314
 
315
        List<Integer> newWarehouseIds = supplierFormData.getInputWarehouseLocation();
316
 
317
        // Only run the warehouse update logic if new warehouse IDs are provided
318
        if (newWarehouseIds != null && !newWarehouseIds.isEmpty()) {
319
            List<Warehouse> existingWarehouses = warehouseRepository.selectVendorWarehouses(supplierId, WarehouseType.OURS, InventoryType.GOOD);
320
            List<Integer> existingWarehouseIds = existingWarehouses.stream().map(Warehouse::getShippingWarehouseId).collect(Collectors.toList());
321
 
322
            // Filter out any IDs that are already present
323
            List<Integer> warehousesToAdd = newWarehouseIds.stream()
324
                    .filter(id -> !existingWarehouseIds.contains(id))
325
                    .collect(Collectors.toList());
326
 
327
            if (!warehousesToAdd.isEmpty()) {
328
                for (Integer warehouseId : warehousesToAdd) {
329
                    WarehouseAddressMapping warehouseAddressMapping = warehouseAddressMappingRepository.selectByWarehouseId(warehouseId);
330
                    if (warehouseAddressMapping != null) {
331
                        List<SellerWarehouse> sellerWarehouses = sellerWarehouseRepository.selectBywarehouseId(warehouseAddressMapping.getWarehouseId());
332
                        for (SellerWarehouse sellerWarehouse : sellerWarehouses) {
333
                            Seller seller = sellerRepository.selectById(sellerWarehouse.getSellerId());
334
                            WarehouseAddressMaster wam = warehouseAddressMasterRepository.selectById(warehouseAddressMapping.getAddressId());
335
 
336
                            // GOOD - WarehouseType.OURS, InventoryType.GOOD
337
                            warehouseService.createVendorWarehouse(WarehouseType.OURS, InventoryType.GOOD, seller.getLabel(), warehouseId, wam, supplierId);
338
 
339
                            // BAD - WarehouseType.OURS, InventoryType.BAD
340
                            warehouseService.createVendorWarehouse(WarehouseType.OURS, InventoryType.BAD, seller.getLabel(), warehouseId, wam, supplierId);
341
 
342
                            // VIRTUAL - WarehouseType.THIRD_PARTY, InventoryType.GOOD
343
                            warehouseService.createVendorWarehouse(WarehouseType.THIRD_PARTY, InventoryType.GOOD, seller.getLabel(), warehouseId, wam, supplierId);
344
                        }
345
                    }
346
                }
347
            }
348
        }
349
 
350
        return "edit-supplier";
351
    }
352
 
353
 
354
 
355
 
356
 
28300 tejbeer 357
}