Subversion Repositories SmartDukaan

Rev

Rev 24236 | Rev 24271 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 24236 Rev 24264
Line 1... Line 1...
1
package com.spice.profitmandi.service.order;
1
package com.spice.profitmandi.service.order;
2
 
2
 
3
import java.time.DateTimeException;
-
 
4
import java.time.LocalDate;
3
import java.time.LocalDate;
5
import java.time.LocalDateTime;
4
import java.time.LocalDateTime;
6
import java.util.ArrayList;
5
import java.util.ArrayList;
7
import java.util.Arrays;
6
import java.util.Arrays;
8
import java.util.HashMap;
7
import java.util.HashMap;
Line 19... Line 18...
19
import org.json.JSONObject;
18
import org.json.JSONObject;
20
import org.springframework.beans.factory.annotation.Autowired;
19
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.beans.factory.annotation.Qualifier;
20
import org.springframework.beans.factory.annotation.Qualifier;
22
import org.springframework.stereotype.Component;
21
import org.springframework.stereotype.Component;
23
 
22
 
-
 
23
import com.spice.profitmandi.common.enumuration.ItemType;
24
import com.spice.profitmandi.common.enumuration.SearchType;
24
import com.spice.profitmandi.common.enumuration.SearchType;
25
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26
import com.spice.profitmandi.common.model.BadReturnRequest;
26
import com.spice.profitmandi.common.model.BadReturnRequest;
27
import com.spice.profitmandi.common.model.CartFofo;
27
import com.spice.profitmandi.common.model.CartFofo;
28
import com.spice.profitmandi.common.model.CreateOrderRequest;
28
import com.spice.profitmandi.common.model.CreateOrderRequest;
Line 68... Line 68...
68
import com.spice.profitmandi.dao.entity.fofo.InvoiceNumberGenerationSequence;
68
import com.spice.profitmandi.dao.entity.fofo.InvoiceNumberGenerationSequence;
69
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
69
import com.spice.profitmandi.dao.entity.fofo.ScanRecord;
70
import com.spice.profitmandi.dao.entity.user.Address;
70
import com.spice.profitmandi.dao.entity.user.Address;
71
import com.spice.profitmandi.dao.entity.user.Counter;
71
import com.spice.profitmandi.dao.entity.user.Counter;
72
import com.spice.profitmandi.dao.entity.user.PrivateDealUser;
72
import com.spice.profitmandi.dao.entity.user.PrivateDealUser;
-
 
73
import com.spice.profitmandi.dao.enumuration.catalog.SchemeType;
73
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
74
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
74
import com.spice.profitmandi.dao.enumuration.fofo.ReturnType;
75
import com.spice.profitmandi.dao.enumuration.fofo.ReturnType;
75
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
76
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
76
import com.spice.profitmandi.dao.enumuration.fofo.SettlementType;
77
import com.spice.profitmandi.dao.enumuration.fofo.SettlementType;
77
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
78
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
Line 105... Line 106...
105
import com.spice.profitmandi.service.pricing.PricingService;
106
import com.spice.profitmandi.service.pricing.PricingService;
106
import com.spice.profitmandi.service.scheme.SchemeService;
107
import com.spice.profitmandi.service.scheme.SchemeService;
107
import com.spice.profitmandi.service.user.RetailerService;
108
import com.spice.profitmandi.service.user.RetailerService;
108
import com.spice.profitmandi.service.wallet.WalletService;
109
import com.spice.profitmandi.service.wallet.WalletService;
109
 
110
 
110
import in.shop2020.model.v1.catalog.ItemType;
-
 
111
import in.shop2020.model.v1.order.WalletReferenceType;
111
import in.shop2020.model.v1.order.WalletReferenceType;
112
 
112
 
113
@Component
113
@Component
114
public class OrderServiceImpl implements OrderService {
114
public class OrderServiceImpl implements OrderService {
115
 
115
 
Line 476... Line 476...
476
			this.createFofoLineItem(fofoOrderItem.getId(), inventoryItems, inventoryItemIdQuantityUsed);
476
			this.createFofoLineItem(fofoOrderItem.getId(), inventoryItems, inventoryItemIdQuantityUsed);
477
 
477
 
478
			this.updateCurrentInventorySnapshot(currentInventorySnapshots, fofoId, customFofoOrderItem.getItemId(),
478
			this.updateCurrentInventorySnapshot(currentInventorySnapshots, fofoId, customFofoOrderItem.getItemId(),
479
					customFofoOrderItem.getQuantity());
479
					customFofoOrderItem.getQuantity());
480
 
480
 
481
			this.updateInventoryItemsAndScanRecord(inventoryItems, fofoId, inventoryItemIdQuantityUsed);
481
			this.updateInventoryItemsAndScanRecord(inventoryItems, fofoId, inventoryItemIdQuantityUsed, fofoOrder.getId());
482
		}
482
		}
483
 
483
 
484
		// insurance calculation is insurance flag is enabled
484
		// insurance calculation is insurance flag is enabled
485
		if (!insuranceSerialNumberItemPrice.isEmpty()) {
485
		if (!insuranceSerialNumberItemPrice.isEmpty()) {
486
			LOGGER.info("Processing for insurence for serialNumbers");
486
			LOGGER.info("Processing for insurence for serialNumbers");
Line 1101... Line 1101...
1101
			throw new ProfitMandiBusinessException("invalidMopItemIdPrice", invalidDiscountAmountMap, "FFORDR_1011");
1101
			throw new ProfitMandiBusinessException("invalidMopItemIdPrice", invalidDiscountAmountMap, "FFORDR_1011");
1102
		}
1102
		}
1103
	}
1103
	}
1104
 
1104
 
1105
	private void updateInventoryItemsAndScanRecord(Set<InventoryItem> inventoryItems, int fofoId,
1105
	private void updateInventoryItemsAndScanRecord(Set<InventoryItem> inventoryItems, int fofoId,
1106
			Map<Integer, Integer> inventoryItemQuantityUsed) {
1106
			Map<Integer, Integer> inventoryItemQuantityUsed, int fofoOrderId) {
1107
		for (InventoryItem inventoryItem : inventoryItems) {
1107
		for (InventoryItem inventoryItem : inventoryItems) {
1108
			inventoryItem.setLastScanType(ScanType.SALE);
1108
			inventoryItem.setLastScanType(ScanType.SALE);
1109
			inventoryItemRepository.persist(inventoryItem);
1109
			inventoryItemRepository.persist(inventoryItem);
1110
			ScanRecord scanRecord = new ScanRecord();
1110
			ScanRecord scanRecord = new ScanRecord();
1111
			scanRecord.setInventoryItemId(inventoryItem.getId());
1111
			scanRecord.setInventoryItemId(inventoryItem.getId());
1112
			scanRecord.setFofoId(fofoId);
1112
			scanRecord.setFofoId(fofoId);
-
 
1113
			scanRecord.setOrderId(fofoOrderId);
1113
			// correct this
1114
			// correct this
1114
			scanRecord.setQuantity(inventoryItemQuantityUsed.get(inventoryItem.getId()));
1115
			scanRecord.setQuantity(inventoryItemQuantityUsed.get(inventoryItem.getId()));
1115
			scanRecord.setType(ScanType.SALE);
1116
			scanRecord.setType(ScanType.SALE);
1116
			scanRecordRepository.persist(scanRecord);
1117
			scanRecordRepository.persist(scanRecord);
1117
			purchaseReturnItemRepository.deleteById(inventoryItem.getId());
1118
			purchaseReturnItemRepository.deleteById(inventoryItem.getId());
Line 1468... Line 1469...
1468
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1469
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1469
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getMarkedBadArr()) {
1470
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getMarkedBadArr()) {
1470
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
1471
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
1471
			customerReturnItem.setFofoId(fofoId);
1472
			customerReturnItem.setFofoId(fofoId);
1472
			customerReturnItem.setFofoOrderItemId(foiBadReturnRequest.getFofoOrderItemId());
1473
			customerReturnItem.setFofoOrderItemId(foiBadReturnRequest.getFofoOrderItemId());
-
 
1474
			customerReturnItem.setFofoOrderId(fofoOrder.getId());
1473
			customerReturnItem.setRemarks(badReturnRequest.getRemarks());
1475
			customerReturnItem.setRemarks(badReturnRequest.getRemarks());
1474
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1476
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1475
			customerReturnItem.setQuantity(1);
1477
			customerReturnItem.setQuantity(1);
1476
			customerReturnItem.setType(ReturnType.BAD);
1478
			customerReturnItem.setType(ReturnType.BAD);
1477
			//customerReturnItemRepository.persist(customerReturnItem);
1479
			//customerReturnItemRepository.persist(customerReturnItem);
Line 1577... Line 1579...
1577
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1579
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1578
		creditNotePdfModel.setPdfModel(pdfModel);
1580
		creditNotePdfModel.setPdfModel(pdfModel);
1579
		return creditNotePdfModel;
1581
		return creditNotePdfModel;
1580
	}
1582
	}
1581
 
1583
 
-
 
1584
 
-
 
1585
	//This will remove the order and maintain order record and reverse inventory and scheme
-
 
1586
	@Override
-
 
1587
	public void cancelOrder(List<String> invoiceNumbers) throws Exception {
-
 
1588
		for(String invoiceNumber : invoiceNumbers) {
-
 
1589
			FofoOrder fofoOrder = fofoOrderRepository.selectByInvoiceNumber(invoiceNumber);
-
 
1590
			fofoOrder.setCancelledTimestamp(LocalDateTime.now());
-
 
1591
			fofoOrderRepository.persist(fofoOrder);
-
 
1592
			List<PaymentOptionTransaction> paymentTransactions = paymentOptionTransactionRepository.selectByReferenceIdAndType(fofoOrder.getId(), PaymentOptionReferenceType.ORDER);
-
 
1593
			for (PaymentOptionTransaction paymentOptionTransaction : paymentTransactions) {
-
 
1594
				paymentOptionTransactionRepository.delete(paymentOptionTransaction);
-
 
1595
			}
-
 
1596
			List<FofoOrderItem> fois = fofoOrderItemRepository.selectByOrderId(fofoOrder.getId());
-
 
1597
			List<InventoryItem> inventoryItems = new ArrayList<>();
-
 
1598
			fois.stream().forEach(x->{
-
 
1599
				x.getFofoLineItems().stream().forEach(y->{
-
 
1600
					inventoryService.rollbackInventory(y.getInventoryItemId(), y.getQuantity(), fofoOrder.getFofoId());
-
 
1601
					inventoryItems.add(inventoryItemRepository.selectById(y.getInventoryItemId()));
-
 
1602
				});
-
 
1603
			});
-
 
1604
			String reversalReason = "Order Rolledback/Cancelled for Invoice Number " + invoiceNumber;
-
 
1605
			schemeService.reverseSchemes(inventoryItems, fofoOrder.getId(), reversalReason, SchemeType.OUT);
-
 
1606
		}
-
 
1607
	}
-
 
1608
 
1582
}
1609
}