Subversion Repositories SmartDukaan

Rev

Rev 20156 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.inventory.controllers;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.shiro.SecurityUtils;

import in.shop2020.inventory.utils.Utils;
import in.shop2020.purchase.Invoice;
import in.shop2020.purchase.PurchaseService.Client;
import in.shop2020.purchase.Supplier;
import in.shop2020.thrift.clients.PurchaseClient;

/**
 * @author mandeep
 * 
 */
public class InvoiceController extends BaseController {
    private static Log logger = LogFactory.getLog(InvoiceController.class);

    private List<Invoice> invoices;
    private String invoiceNumber;
    private String date;
    private String receivedFrom;
    private String supplierId;
    private String numItems;
    private Long warehouseId;
    private String invoiceDate;
    //2016-07-08
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private Map<Long, Supplier> suppliers = new HashMap<Long, Supplier>();

    /*
     * (non-Javadoc)
     * 
     * @see in.shop2020.inventory.controllers.BaseController#nindex()
     */
    @Override
    public String index() {
        try {
            Client purchaseClient = new PurchaseClient().getClient();
            invoices = purchaseClient.getInvoices(getYesterday().getTime());
            for (Supplier s : Utils.getSuppliers()) {
                suppliers.put(s.getId(), s);
            }
        } catch (Exception e) {
            logger.error("Could not fetch invoices", e);
        }

        return super.index();
    }

    /* (non-Javadoc)
     * @see in.shop2020.inventory.controllers.BaseController#editNew()
     */
    @Override
    public String editNew() {
        try {
            for (Supplier s : Utils.getSuppliers()) {
                suppliers.put(s.getId(), s);
            }
        } catch (Exception e) {
            logger.error("Could not fetch suppliers", e);
        }

        return super.editNew();
    }

    private Date getYesterday() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        return calendar.getTime();
    }

    public String create() {
        try {
                if(!isAutorizedToAccessWarehouse(warehouseId)){
                        logger.error("Unauthorized Access for WarehouseId " + warehouseId + " by " + SecurityUtils.getSubject().getPrincipal().toString());
                        addActionError("Unauthorized Access for WarehouseId " + warehouseId);
                        return EDIT_NEW;
                }
                long currentTime = sdf.parse(sdf.format(new Date())).getTime();
                if(currentTime !=sdf.parse(date).getTime()){
                        logger.error("Invoice Receive Date Must be equal to Today's Date");
                        addActionError("Invoice Receive Date Must be equal to Today's Date");
                        return EDIT_NEW;
                }
                Client purchaseClient = new PurchaseClient().getClient();
        if(!purchaseClient.isInvoiceReceived(invoiceNumber, Long.parseLong(supplierId))) {
                    Invoice invoice = new Invoice();
                    invoice.setInvoiceNumber(invoiceNumber);
                    invoice.setDate(sdf.parse(date).getTime());
                    invoice.setNumItems(Long.valueOf(numItems));
                    invoice.setReceivedFrom(receivedFrom);
                    invoice.setSupplierId(Long.valueOf(supplierId));
                    invoice.setWarehouseId(warehouseId);
                    invoice.setInvoiceDate(sdf.parse(invoiceDate).getTime());
                    purchaseClient = new PurchaseClient().getClient();
                    purchaseClient.createInvoice(invoice);
                } else {
                        addActionError("Duplicate invoice " + invoiceNumber + " for supplierId " + supplierId);
                        return EDIT_NEW;
                }
        } catch (Exception e) {
            logger.error("Could not create invoice", e);
        }

        return index();
    }

    /**
     * Utility method to convert a date to a readable format 
     */
    public String convertDate(Long date) {
        if (date == null || date == 0) {
            return "N/A";
        }

        return sdf.format(new Date(date));
    }

    public List<Invoice> getInvoices() {
        return invoices;
    }

    public void setInvoices(List<Invoice> invoices) {
        this.invoices = invoices;
    }

    public String getInvoiceNumber() {
        return invoiceNumber;
    }

    public void setInvoiceNumber(String invoiceNumber) {
        this.invoiceNumber = invoiceNumber;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getReceivedFrom() {
        return receivedFrom;
    }

    public void setReceivedFrom(String receivedFrom) {
        this.receivedFrom = receivedFrom;
    }

    public String getSupplierId() {
        return supplierId;
    }

    public void setSupplierId(String supplierId) {
        this.supplierId = supplierId;
    }

    public String getNumItems() {
        return numItems;
    }

    public void setNumItems(String numItems) {
        this.numItems = numItems;
    }

    public Map<Long, Supplier> getSuppliers() {
        return suppliers;
    }

    public void setSuppliers(Map<Long, Supplier> suppliers) {
        this.suppliers = suppliers;
    }

        public Long getWarehouseId() {
                return warehouseId;
        }

        public void setWarehouseId(Long warehouseId) {
                this.warehouseId = warehouseId;
        }

        public String getInvoiceDate() {
                return invoiceDate;
        }

        public void setInvoiceDate(String invoiceDate) {
                this.invoiceDate = invoiceDate;
        }
        
}