Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
23405 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
3
import java.time.LocalDate;
4
import java.time.LocalDateTime;
5
import java.time.LocalTime;
6
import java.util.ArrayList;
7
import java.util.Arrays;
8
import java.util.HashMap;
9
import java.util.HashSet;
10
import java.util.List;
11
import java.util.Map;
12
import java.util.stream.Collectors;
13
 
14
import javax.servlet.http.HttpServletRequest;
15
 
23568 govind 16
import org.apache.logging.log4j.Logger;
17
import org.apache.logging.log4j.LogManager;
23405 amit.gupta 18
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.stereotype.Controller;
20
import org.springframework.transaction.annotation.Transactional;
21
import org.springframework.ui.Model;
22
import org.springframework.web.bind.annotation.RequestBody;
23
import org.springframework.web.bind.annotation.RequestMapping;
24
import org.springframework.web.bind.annotation.RequestMethod;
25
 
26
import com.google.common.base.Functions;
27
import com.spice.profitmandi.common.enumuration.IndentStatus;
28
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
29
import com.spice.profitmandi.common.model.ItemIdQuantity;
30
import com.spice.profitmandi.dao.entity.catalog.TagListing;
31
import com.spice.profitmandi.dao.entity.fofo.CurrentInventorySnapshot;
32
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
33
import com.spice.profitmandi.dao.entity.fofo.Indent;
34
import com.spice.profitmandi.dao.entity.fofo.IndentItem;
35
import com.spice.profitmandi.dao.repository.catalog.CategoryRepository;
36
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
37
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
38
import com.spice.profitmandi.dao.repository.dtr.IndentItemRepository;
39
import com.spice.profitmandi.dao.repository.dtr.IndentRepository;
40
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
41
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
42
import com.spice.profitmandi.service.indent.IndentService;
43
import com.spice.profitmandi.web.model.LoginDetails;
44
import com.spice.profitmandi.web.util.CookiesProcessor;
45
import com.spice.profitmandi.web.util.MVCResponseSender;
46
 
47
@Controller
48
@Transactional(rollbackFor = Throwable.class)
49
public class IndentController {
50
 
23568 govind 51
	private static final Logger LOGGER = LogManager.getLogger(IndentController.class);
23405 amit.gupta 52
 
53
	@Autowired
54
	private CookiesProcessor cookiesProcessor;
55
 
56
	@Autowired
57
	private CategoryRepository categoryRepository;
58
 
59
	@Autowired
60
	private ItemRepository itemRepository;
61
 
62
	@Autowired
63
	private IndentRepository indentRepository;
64
 
65
	@Autowired
66
	private IndentItemRepository indentItemRepository;
67
 
68
	@Autowired
69
	private IndentService indentService;
70
 
71
	@Autowired
72
	private TagListingRepository tagListingRepository;
73
 
74
	@Autowired
75
	private FofoOrderRepository fofoOrderRepository;
76
 
77
	@Autowired
78
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
79
 
80
	@Autowired
81
	private MVCResponseSender mvcResponseSender;
82
 
83
	@RequestMapping(value = "/indent-item/save", method = RequestMethod.PUT)
84
	public String saveIndentItem(HttpServletRequest request, @RequestBody ItemIdQuantity itemIdQuantity, Model model)
85
			throws Exception {
86
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
87
		LOGGER.info("Item id is {}, And quantity is {}", itemIdQuantity.getItemId(), itemIdQuantity.getItemId());
88
		int fofoId = loginDetails.getFofoId();
89
		boolean response = indentService.updateOpenIndentItem(fofoId, itemIdQuantity.getItemId(),
90
				itemIdQuantity.getQuantity());
91
		model.addAttribute("response", mvcResponseSender.createResponseString(response));
92
		return "response";
93
	}
94
 
95
	@RequestMapping(value = "/open-indent/save", method = RequestMethod.PUT)
96
	public String saveOpenIndent(HttpServletRequest request, Model model) throws Exception {
97
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
98
		int fofoId = loginDetails.getFofoId();
99
		List<Indent> openIndents = indentRepository.selectIndentByStatus(fofoId, IndentStatus.OPEN);
100
		if (openIndents.size() > 0) {
101
			Indent openIndent = openIndents.get(0);
102
			if (indentItemRepository.selectIndentItems(Arrays.asList(openIndent.getId())).size() == 0) {
103
				model.addAttribute("response", mvcResponseSender.createResponseString(false));
104
			}
105
			openIndent.setCreateTimestamp(LocalDateTime.now());
106
			openIndent.setStatus(IndentStatus.ALLOCATED);
107
			indentRepository.persist(openIndent);
108
			model.addAttribute("response", mvcResponseSender.createResponseString(true));
109
		}
110
		return "response";
111
	}
112
 
23415 amit.gupta 113
	@RequestMapping(value = "/migrate", method = RequestMethod.PUT)
114
	public String migrate(HttpServletRequest request, Model model) throws Exception {
115
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
116
		int fofoId = loginDetails.getFofoId();
117
		List<TagListing> tagListings = tagListingRepository.selectAll();
118
		for(TagListing tagListing : tagListings) {
119
			int itemId = tagListing.getItemId();
120
		}
121
		return "";
122
	}
123
 
23405 amit.gupta 124
	@RequestMapping(value = "/indent/inProcess")
125
	public String loadInProcessIndents(HttpServletRequest request, Model model) throws ProfitMandiBusinessException{
126
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
127
		int fofoId = loginDetails.getFofoId();
128
 
129
		List<Integer> pendingIndentIds = indentRepository.selectIndentByStatus(fofoId, IndentStatus.PENDING).stream().map(x->x.getId()).collect(Collectors.toList());
130
		List<Integer> allocatedIndentIds = indentRepository.selectIndentByStatus(fofoId, IndentStatus.ALLOCATED).stream().map(x->x.getId()).collect(Collectors.toList());
131
		pendingIndentIds.addAll(allocatedIndentIds);
132
 
133
		if(pendingIndentIds.size() > 0) {
134
			Map<Integer, IndentItem> pendingIndentItemIdMap = indentItemRepository.selectIndentItems(pendingIndentIds).stream().collect(Collectors.toMap(x->x.getItemId(), x->x));
135
			List<TagListing> tagListings = tagListingRepository.selectByItemIdsAndTagIds(pendingIndentItemIdMap.keySet(), new HashSet<>(Arrays.asList(4)));
136
 
137
			List<FofoOrderItem> fofoOrderItems = fofoOrderRepository.selectByFofoItemIds(fofoId, pendingIndentIds, LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(30), LocalDateTime.now());
138
			Map<Integer, Integer> itemQuantity = fofoOrderItems.stream().collect(
139
					Collectors.groupingBy(FofoOrderItem::getItemId, Collectors.summingInt(FofoOrderItem::getQuantity)));
140
 
141
			List<CurrentInventorySnapshot> cis = currentInventorySnapshotRepository.selectByFofoId(fofoId);
142
			Map<Integer, CurrentInventorySnapshot> itemIdSnapshotMap = cis.stream().collect(Collectors.toMap(CurrentInventorySnapshot::getItemId, Functions.identity()));
143
 
144
			for(TagListing tagListing : tagListings){
145
				Integer itemId = tagListing.getItemId();
146
				tagListing.setItemDescription(itemRepository.selectById(itemId).getItemDescription());
147
				if(itemQuantity.containsKey(itemId)) {
148
					tagListing.setLast30DaysSale(itemQuantity.get(itemId));
149
				}
150
				if(itemIdSnapshotMap.containsKey(itemId)){
151
					tagListing.setStockInHand(itemIdSnapshotMap.get(itemId).getAvailability());
152
				}
153
			}
154
 
155
			model.addAttribute("pendingIndentItemIdMap", pendingIndentItemIdMap);
156
			model.addAttribute("tagListings", tagListings);
157
		}
158
		return "pending-indent";
159
	}
160
 
161
	@RequestMapping(value = "/indent/loadIndent")
162
	public String loadOpenIndent(HttpServletRequest request, Model model) throws ProfitMandiBusinessException {
163
		LoginDetails loginDetails = cookiesProcessor.getCookiesObject(request);
164
		int fofoId = loginDetails.getFofoId();
165
		List<Indent> openIndents = indentRepository.selectIndentByStatus(fofoId, IndentStatus.OPEN);
166
		Indent openIndent = null;
167
		if (openIndents.size() > 0) {
168
			openIndent = openIndents.get(0);
169
		} else {
170
			LOGGER.info("Indent does not exist");
171
		}
172
		Map<Integer, IndentItem> itemIndentMap = new HashMap<>();
173
		if (openIndent != null) {
174
			List<IndentItem> openIndentItems = indentItemRepository
175
					.selectIndentItems(Arrays.asList(openIndent.getId()));
176
			if (openIndentItems.size() > 0) {
177
				itemIndentMap = openIndentItems.stream().collect(Collectors.toMap(x -> x.getItemId(), x -> x));
178
			}
179
		}
180
 
181
		List<TagListing> tagListings = tagListingRepository.selectAll();
182
 
183
		List<Integer> itemIds = new ArrayList<>();
184
		for (TagListing tagListing : tagListings) {
185
			itemIds.add(tagListing.getItemId());
186
		}
187
 
188
		List<FofoOrderItem> fofoOrderItems = fofoOrderRepository.selectByFofoItemIds(fofoId, itemIds,
189
				LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT).minusDays(30), LocalDateTime.now());
190
		Map<Integer, Integer> itemQuantity = fofoOrderItems.stream().collect(
191
				Collectors.groupingBy(FofoOrderItem::getItemId, Collectors.summingInt(FofoOrderItem::getQuantity)));
192
 
193
		List<CurrentInventorySnapshot> cis = currentInventorySnapshotRepository.selectByFofoId(fofoId);
194
		Map<Integer, CurrentInventorySnapshot> itemIdSnapshotMap = cis.stream()
195
				.collect(Collectors.toMap(CurrentInventorySnapshot::getItemId, Functions.identity()));
196
 
197
		List<Integer> pendingIndentIds = indentRepository.selectIndentByStatus(fofoId, IndentStatus.PENDING).stream()
198
				.map(x -> x.getId()).collect(Collectors.toList());
199
		List<Integer> allocatedIndentIds = indentRepository.selectIndentByStatus(fofoId, IndentStatus.ALLOCATED)
200
				.stream().map(x -> x.getId()).collect(Collectors.toList());
201
		pendingIndentIds.addAll(allocatedIndentIds);
202
 
203
		if (pendingIndentIds.size() > 0) {
204
			List<Integer> pendingItemIds = indentItemRepository.selectIndentItems(pendingIndentIds).stream()
205
					.map(x -> x.getItemId()).collect(Collectors.toList());
206
			tagListings = tagListings.stream().filter(x -> pendingItemIds.indexOf(x.getItemId()) == -1)
207
					.collect(Collectors.toList());
208
		}
209
 
210
		for (TagListing tagListing : tagListings) {
211
			Integer itemId = tagListing.getItemId();
212
			tagListing.setItemDescription(itemRepository.selectById(itemId).getItemDescription());
213
			if (itemQuantity.containsKey(itemId)) {
214
				tagListing.setLast30DaysSale(itemQuantity.get(itemId));
215
			}
216
			if (itemIdSnapshotMap.containsKey(itemId)) {
217
				tagListing.setStockInHand(itemIdSnapshotMap.get(itemId).getAvailability());
218
			}
219
		}
220
 
221
		model.addAttribute("tagListings", tagListings);
222
		model.addAttribute("itemIndentMap", itemIndentMap);
223
		return "open-indent";
224
	}
225
}