Subversion Repositories SmartDukaan

Rev

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

Rev 23650 Rev 23655
Line 4... Line 4...
4
import java.net.URISyntaxException;
4
import java.net.URISyntaxException;
5
import java.time.DateTimeException;
5
import java.time.DateTimeException;
6
import java.time.LocalDate;
6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
7
import java.time.LocalDateTime;
8
import java.util.ArrayList;
8
import java.util.ArrayList;
-
 
9
import java.util.Arrays;
9
import java.util.HashMap;
10
import java.util.HashMap;
10
import java.util.HashSet;
11
import java.util.HashSet;
11
import java.util.Iterator;
12
import java.util.Iterator;
12
import java.util.List;
13
import java.util.List;
13
import java.util.Map;
14
import java.util.Map;
Line 78... Line 79...
78
import com.spice.profitmandi.dao.entity.user.PrivateDealUser;
79
import com.spice.profitmandi.dao.entity.user.PrivateDealUser;
79
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
80
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
80
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
81
import com.spice.profitmandi.dao.enumuration.dtr.PaymentOptionReferenceType;
81
import com.spice.profitmandi.dao.enumuration.fofo.ReturnType;
82
import com.spice.profitmandi.dao.enumuration.fofo.ReturnType;
82
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
83
import com.spice.profitmandi.dao.enumuration.fofo.ScanType;
-
 
84
import com.spice.profitmandi.dao.enumuration.fofo.SettlementType;
83
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
85
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
84
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
86
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
85
import com.spice.profitmandi.dao.repository.dtr.InsurancePolicyRepository;
87
import com.spice.profitmandi.dao.repository.dtr.InsurancePolicyRepository;
86
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
88
import com.spice.profitmandi.dao.repository.dtr.InsuranceProviderRepository;
87
import com.spice.profitmandi.dao.repository.dtr.OtpRepository;
89
import com.spice.profitmandi.dao.repository.dtr.OtpRepository;
Line 110... Line 112...
110
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
112
import com.spice.profitmandi.dao.repository.fofo.ScanRecordRepository;
111
import com.spice.profitmandi.dao.repository.user.AddressRepository;
113
import com.spice.profitmandi.dao.repository.user.AddressRepository;
112
import com.spice.profitmandi.dao.repository.user.CounterRepository;
114
import com.spice.profitmandi.dao.repository.user.CounterRepository;
113
import com.spice.profitmandi.dao.repository.user.PrivateDealUserRepository;
115
import com.spice.profitmandi.dao.repository.user.PrivateDealUserRepository;
114
import com.spice.profitmandi.service.inventory.InventoryService;
116
import com.spice.profitmandi.service.inventory.InventoryService;
-
 
117
import com.spice.profitmandi.service.inventory.PurchaseReturnService;
115
import com.spice.profitmandi.service.pricing.PricingService;
118
import com.spice.profitmandi.service.pricing.PricingService;
116
import com.spice.profitmandi.service.scheme.SchemeService;
119
import com.spice.profitmandi.service.scheme.SchemeService;
-
 
120
import com.spice.profitmandi.service.user.RetailerService;
117
import com.spice.profitmandi.service.wallet.WalletService;
121
import com.spice.profitmandi.service.wallet.WalletService;
118
 
122
 
119
import in.shop2020.model.v1.catalog.ItemType;
123
import in.shop2020.model.v1.catalog.ItemType;
120
import in.shop2020.model.v1.order.WalletReferenceType;
124
import in.shop2020.model.v1.order.WalletReferenceType;
121
 
125
 
Line 135... Line 139...
135
 
139
 
136
	@Autowired
140
	@Autowired
137
	private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
141
	private InvoiceNumberGenerationSequenceRepository invoiceNumberGenerationSequenceRepository;
138
 
142
 
139
	@Autowired
143
	@Autowired
-
 
144
	private PurchaseReturnService purchaseReturnService;
-
 
145
 
-
 
146
	@Autowired
-
 
147
	private RetailerService retailerService;
-
 
148
 
-
 
149
	@Autowired
140
	private CustomerRepository customerRepository;
150
	private CustomerRepository customerRepository;
141
 
151
 
142
	@Autowired
152
	@Autowired
143
	private PurchaseReturnItemRepository purchaseReturnItemRepository;
153
	private PurchaseReturnItemRepository purchaseReturnItemRepository;
144
 
154
 
Line 690... Line 700...
690
		tncs.add("Warranty for the goods received by me is the responsibility of the manufacturer only.");
700
		tncs.add("Warranty for the goods received by me is the responsibility of the manufacturer only.");
691
		if (pdfModel.getInsurancePolicies() != null && pdfModel.getInsurancePolicies().size() > 0) {
701
		if (pdfModel.getInsurancePolicies() != null && pdfModel.getInsurancePolicies().size() > 0) {
692
			tncs.add("Damage protection provided is the responisibility of Protection Provider only");
702
			tncs.add("Damage protection provided is the responisibility of Protection Provider only");
693
		}
703
		}
694
		pdfModel.setTncs(tncs);
704
		pdfModel.setTncs(tncs);
695
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
696
		CustomCustomer customCustomer = new CustomCustomer();
-
 
697
		customCustomer.setFirstName(customer.getFirstName());
-
 
698
		customCustomer.setLastName(customer.getLastName());
-
 
699
		customCustomer.setEmailId(customer.getEmailId());
-
 
700
		customCustomer.setMobileNumber(customer.getMobileNumber());
-
 
701
		customCustomer.setGstNumber(fofoOrder.getCustomerGstNumber());
-
 
702
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
703
		customCustomer.setAddress(this.createCustomAddress(customerAddress));
-
 
-
 
705
		
704
		pdfModel.setCustomer(customCustomer);
706
		pdfModel.setCustomer(getCustomCustomer(fofoOrder));
705
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
707
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
706
		pdfModel.setTotalAmount(fofoOrder.getTotalAmount());
708
		pdfModel.setTotalAmount(fofoOrder.getTotalAmount());
707
 
709
 
708
		Retailer retailer = retailerRepository.selectById(fofoOrder.getFofoId());
710
		Retailer retailer = retailerRepository.selectById(fofoOrder.getFofoId());
709
		PrivateDealUser privateDealUser = null;
711
		PrivateDealUser privateDealUser = null;
Line 772... Line 774...
772
		pdfModel.setOrderItems(customerFofoOrderItems);
774
		pdfModel.setOrderItems(customerFofoOrderItems);
773
		return pdfModel;
775
		return pdfModel;
774
 
776
 
775
	}
777
	}
776
 
778
 
-
 
779
	private CustomCustomer getCustomCustomer(FofoOrder fofoOrder) throws ProfitMandiBusinessException {
-
 
780
		Customer customer = customerRepository.selectById(fofoOrder.getCustomerId());
-
 
781
		CustomCustomer customCustomer = new CustomCustomer();
-
 
782
		customCustomer.setFirstName(customer.getFirstName());
-
 
783
		customCustomer.setLastName(customer.getLastName());
-
 
784
		customCustomer.setEmailId(customer.getEmailId());
-
 
785
		customCustomer.setMobileNumber(customer.getMobileNumber());
-
 
786
		customCustomer.setGstNumber(fofoOrder.getCustomerGstNumber());
-
 
787
		CustomerAddress customerAddress = customerAddressRepository.selectById(fofoOrder.getCustomerAddressId());
-
 
788
		customCustomer.setAddress(this.createCustomAddress(customerAddress));
-
 
789
		return customCustomer;
-
 
790
	}
-
 
791
 
777
	@Override
792
	@Override
778
	public PdfModel getInvoicePdfModel(int fofoId, int orderId) throws ProfitMandiBusinessException {
793
	public PdfModel getInvoicePdfModel(int fofoId, int orderId) throws ProfitMandiBusinessException {
779
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, orderId);
794
		FofoOrder fofoOrder = fofoOrderRepository.selectByFofoIdAndOrderId(fofoId, orderId);
780
		return this.getInvoicePdfModel(fofoOrder);
795
		return this.getInvoicePdfModel(fofoOrder);
781
	}
796
	}
Line 1616... Line 1631...
1616
		this.setCustomerAddress(customerAddress, customCustomer.getAddress());
1631
		this.setCustomerAddress(customerAddress, customCustomer.getAddress());
1617
		customerAddressRepository.persist(customerAddress);
1632
		customerAddressRepository.persist(customerAddress);
1618
	}
1633
	}
1619
 
1634
 
1620
	@Override
1635
	@Override
1621
	public void badReturn(int fofoId, FoiBadReturnRequest foiBadReturnRequest) throws ProfitMandiBusinessException {
1636
	public CustomerCreditNote badReturn(int fofoId, FoiBadReturnRequest foiBadReturnRequest) throws ProfitMandiBusinessException {
1622
		FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFoiId());
1637
		FofoOrderItem foi = fofoOrderItemRepository.selectById(foiBadReturnRequest.getFofoOrderItemId());
1623
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(foi.getOrderId());
1638
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(foi.getOrderId());
1624
		if (fofoOrderRepository.selectByOrderId(foi.getOrderId()).getFofoId() == fofoId) {
1639
		if (fofoOrder.getFofoId() != fofoId) {
1625
			throw new ProfitMandiBusinessException("Partner Auth", "", "Invalid Order");
1640
			throw new ProfitMandiBusinessException("Partner Auth", "", "Invalid Order");
1626
		}
1641
		}
-
 
1642
		int billedQty = foi.getQuantity() - customerReturnItemRepository.selectAllByOrderItemId(foi.getId()).size();
-
 
1643
		if(foiBadReturnRequest.getMarkedBadArr().size() > billedQty ) {
-
 
1644
			throw new ProfitMandiBusinessException("Cant bad return more than what is billed", "", "Invalid Quantity");
-
 
1645
		}
1627
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1646
		List<CustomerReturnItem> customerReturnItems = new ArrayList<>();
1628
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getBadReturnArr()) {
1647
		for (BadReturnRequest badReturnRequest : foiBadReturnRequest.getMarkedBadArr()) {
1629
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
1648
			CustomerReturnItem customerReturnItem = new CustomerReturnItem();
1630
			customerReturnItem.setFofoId(fofoId);
1649
			customerReturnItem.setFofoId(fofoId);
1631
			customerReturnItem.setFofoOrderItemId(foiBadReturnRequest.getFoiId());
1650
			customerReturnItem.setFofoOrderItemId(foiBadReturnRequest.getFofoOrderItemId());
-
 
1651
			customerReturnItem.setRemarks(badReturnRequest.getRemarks());
1632
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1652
			customerReturnItem.setInventoryItemId(badReturnRequest.getInventoryItemId());
1633
			customerReturnItem.setQuantity(1);
1653
			customerReturnItem.setQuantity(1);
1634
			customerReturnItem.setType(ReturnType.BAD);
1654
			customerReturnItem.setType(ReturnType.BAD);
1635
			//customerReturnItemRepository.persist(customerReturnItem);
1655
			//customerReturnItemRepository.persist(customerReturnItem);
1636
			inventoryService.saleReturnInventoryItem(customerReturnItem);
1656
			inventoryService.saleReturnInventoryItem(customerReturnItem);
1637
			customerReturnItems.add(customerReturnItem);
1657
			customerReturnItems.add(customerReturnItem);
1638
		}
1658
		}
1639
		generateCreditNote(fofoOrder, customerReturnItems);
1659
		CustomerCreditNote creditNote = generateCreditNote(fofoOrder, customerReturnItems);
-
 
1660
		for (CustomerReturnItem customerReturnItem: customerReturnItems) {
-
 
1661
			purchaseReturnService.returnInventoryItem(fofoId, false, customerReturnItem.getInventoryItemId(), ReturnType.BAD);
1640
 
1662
		}
-
 
1663
        return creditNote;
1641
	}
1664
	}
1642
 
1665
 
1643
	private CreditNotePdfModel generateCreditNote(FofoOrder fofoOrder, List<CustomerReturnItem> customerReturnItems) throws ProfitMandiBusinessException {
1666
	private CustomerCreditNote generateCreditNote(FofoOrder fofoOrder, List<CustomerReturnItem> customerReturnItems) throws ProfitMandiBusinessException {
1644
 
1667
 
1645
		InvoiceNumberGenerationSequence sequence = invoiceNumberGenerationSequenceRepository
1668
		InvoiceNumberGenerationSequence sequence = invoiceNumberGenerationSequenceRepository
1646
				.selectByFofoId(fofoOrder.getFofoId());
1669
				.selectByFofoId(fofoOrder.getFofoId());
1647
		sequence.setCreditNoteSequence(sequence.getCreditNoteSequence() + 1);
1670
		sequence.setCreditNoteSequence(sequence.getCreditNoteSequence() + 1);
1648
		invoiceNumberGenerationSequenceRepository.persist(sequence);
1671
		invoiceNumberGenerationSequenceRepository.persist(sequence);
1649
		
1672
		
1650
		String creditNoteNumber = sequence.getPrefix() + "/" + sequence.getReturnSequence();
1673
		String creditNoteNumber = sequence.getPrefix() + "/" + sequence.getCreditNoteSequence();
1651
		CustomerCreditNote creditNote = new CustomerCreditNote();
1674
		CustomerCreditNote creditNote = new CustomerCreditNote();
1652
		creditNote.setCreditNoteNumber(creditNoteNumber);
1675
		creditNote.setCreditNoteNumber(creditNoteNumber);
1653
		creditNote.setFofoId(fofoOrder.getFofoId());
1676
		creditNote.setFofoId(fofoOrder.getFofoId());
1654
		creditNote.setCreditNoteNumber(creditNoteNumber);
1677
		creditNote.setFofoOrderId(fofoOrder.getId());
-
 
1678
		creditNote.setFofoOrderItemId(customerReturnItems.get(0).getFofoOrderItemId());
-
 
1679
		creditNote.setSettlementType(SettlementType.UNSETTLED);
1655
		customerCreditNoteRepository.persist(creditNote);
1680
		customerCreditNoteRepository.persist(creditNote);
1656
		
1681
		
1657
		for (CustomerReturnItem customerReturnItem : customerReturnItems) {
1682
		for (CustomerReturnItem customerReturnItem : customerReturnItems) {
1658
			customerReturnItem.setCreditNoteId(creditNote.getId());
1683
			customerReturnItem.setCreditNoteId(creditNote.getId());
1659
			customerReturnItemRepository.persist(customerReturnItem);
1684
			customerReturnItemRepository.persist(customerReturnItem);
1660
		}
1685
		}
1661
		//this.returnInventoryItems(inventoryItems, debitNote);
1686
		//this.returnInventoryItems(inventoryItems, debitNote);
1662
 
1687
 
1663
		return getCreditNotePdfModel(creditNote, customerReturnItems);
1688
		return creditNote;
1664
	}
1689
	}
1665
	
1690
	
-
 
1691
	@Override
-
 
1692
	public CreditNotePdfModel getCreditNotePdfModel(int customerCreditNoteId) throws ProfitMandiBusinessException {
-
 
1693
		CustomerCreditNote creditNote = customerCreditNoteRepository.selectById(customerCreditNoteId);
-
 
1694
		return getCreditNotePdfModel(creditNote);
-
 
1695
	}
-
 
1696
	
1666
	private CreditNotePdfModel getCreditNotePdfModel(CustomerCreditNote creditNote, List<CustomerReturnItem> customerReturnItems) {
1697
	private CreditNotePdfModel getCreditNotePdfModel(CustomerCreditNote creditNote) throws ProfitMandiBusinessException {
-
 
1698
		FofoOrder fofoOrder = fofoOrderRepository.selectByOrderId(creditNote.getFofoOrderId());
-
 
1699
		List<CustomerReturnItem> customerReturnItems = customerReturnItemRepository.selectAllByCreditNoteId(creditNote.getId());
-
 
1700
		CustomCustomer customCustomer = getCustomCustomer(fofoOrder);
-
 
1701
		
-
 
1702
		Set<CustomOrderItem> customerFofoOrderItems = new HashSet<>();
-
 
1703
		CustomRetailer customRetailer = retailerService.getFofoRetailers(Arrays.asList(fofoOrder.getFofoId())).get(fofoOrder.getFofoId());
-
 
1704
 
-
 
1705
		FofoOrderItem fofoOrderItem = fofoOrderItemRepository.selectById(creditNote.getFofoOrderItemId());
-
 
1706
		float totalTaxRate = fofoOrderItem.getIgstRate() + fofoOrderItem.getSgstRate() + fofoOrderItem.getCgstRate();
-
 
1707
		float taxableSellingPrice = fofoOrderItem.getSellingPrice() / (1 + totalTaxRate / 100);
-
 
1708
		float taxableDiscountPrice = fofoOrderItem.getDiscount() / (1 + totalTaxRate / 100);
-
 
1709
 
-
 
1710
		CustomOrderItem customFofoOrderItem = new CustomOrderItem();
-
 
1711
		customFofoOrderItem.setAmount(customerReturnItems.size() * (taxableSellingPrice - taxableDiscountPrice));
-
 
1712
		customFofoOrderItem.setDescription(fofoOrderItem.getBrand() + " " + fofoOrderItem.getModelName() + " "
-
 
1713
				+ fofoOrderItem.getModelNumber() + "-" + fofoOrderItem.getColor());
-
 
1714
		
-
 
1715
		if(ItemType.SERIALIZED.equals(itemRepository.selectById(fofoOrderItem.getItemId()).getType())){
-
 
1716
			Set<Integer> inventoryItemIds = customerReturnItems.stream().map(x -> x.getInventoryItemId())
-
 
1717
					.collect(Collectors.toSet());
-
 
1718
			List<String> serialNumbers = inventoryItemRepository.selectByIds(inventoryItemIds).stream()
-
 
1719
					.map(x -> x.getSerialNumber()).collect(Collectors.toList());
-
 
1720
			customFofoOrderItem.setDescription(
-
 
1721
					customFofoOrderItem.getDescription() + "\n IMEIS - " + String.join(", ", serialNumbers));
-
 
1722
		}
-
 
1723
		
-
 
1724
		customFofoOrderItem.setRate(taxableSellingPrice);
-
 
1725
		customFofoOrderItem.setDiscount(taxableDiscountPrice);
-
 
1726
		customFofoOrderItem.setQuantity(customerReturnItems.size());
-
 
1727
		customFofoOrderItem.setNetAmount((fofoOrderItem.getSellingPrice() - fofoOrderItem.getDiscount()) * customFofoOrderItem.getQuantity());
-
 
1728
 
-
 
1729
		float igstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getIgstRate()) / 100;
-
 
1730
		float cgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getCgstRate()) / 100;
-
 
1731
		float sgstAmount = (customFofoOrderItem.getAmount() * fofoOrderItem.getSgstRate()) / 100;
-
 
1732
		LOGGER.info("fofoOrderItem - {}", fofoOrderItem);
-
 
1733
		customFofoOrderItem.setIgstRate(fofoOrderItem.getIgstRate());
-
 
1734
		customFofoOrderItem.setIgstAmount(igstAmount);
-
 
1735
		customFofoOrderItem.setCgstRate(fofoOrderItem.getCgstRate());
-
 
1736
		customFofoOrderItem.setCgstAmount(cgstAmount);
-
 
1737
		customFofoOrderItem.setSgstRate(fofoOrderItem.getSgstRate());
-
 
1738
		customFofoOrderItem.setSgstAmount(sgstAmount);
-
 
1739
		customFofoOrderItem.setHsnCode(fofoOrderItem.getHsnCode());
-
 
1740
		customerFofoOrderItems.add(customFofoOrderItem);
-
 
1741
		
1667
		PdfModel pdfModel = new PdfModel();
1742
		PdfModel pdfModel = new PdfModel();
1668
		pdfModel.setAuther("NSSPL");
1743
		pdfModel.setAuther("NSSPL");
-
 
1744
		pdfModel.setCustomer(customCustomer);
-
 
1745
		pdfModel.setInvoiceNumber(fofoOrder.getInvoiceNumber());
-
 
1746
		pdfModel.setInvoiceDate(FormattingUtils.formatDate(fofoOrder.getCreateTimestamp()));
-
 
1747
		pdfModel.setTitle("Credit Note");
-
 
1748
		pdfModel.setRetailer(customRetailer);
-
 
1749
		pdfModel.setTotalAmount(customFofoOrderItem.getNetAmount());
-
 
1750
		pdfModel.setOrderItems(customerFofoOrderItems);
-
 
1751
		
1669
		CreditNotePdfModel creditNotePdfModel = new CreditNotePdfModel();
1752
		CreditNotePdfModel creditNotePdfModel = new CreditNotePdfModel();
1670
		creditNotePdfModel.setCreditNoteDate(FormattingUtils.formatDate(creditNote.getCreateTimestamp()));
1753
		creditNotePdfModel.setCreditNoteDate(FormattingUtils.formatDate(creditNote.getCreateTimestamp()));
1671
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1754
		creditNotePdfModel.setCreditNoteNumber(creditNote.getCreditNoteNumber());
1672
		creditNotePdfModel.setPdfModel(pdfModel);
1755
		creditNotePdfModel.setPdfModel(pdfModel);
1673
		return creditNotePdfModel;
1756
		return creditNotePdfModel;