Subversion Repositories SmartDukaan

Rev

Rev 4531 | Blame | Last modification | View Log | RSS feed

package in.shop2020.support.controllers;

import in.shop2020.model.v1.catalog.InventoryServiceException;
import in.shop2020.purchase.PurchaseServiceException;
import in.shop2020.thrift.clients.CatalogClient;
import in.shop2020.thrift.clients.PurchaseClient;
import in.shop2020.thrift.clients.WarehouseClient;
import in.shop2020.warehouse.InventoryItem;
import in.shop2020.warehouse.ScanType;
import in.shop2020.warehouse.WarehouseService.Client;
import in.shop2020.warehouse.WarehouseServiceException;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.util.ServletContextAware;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opensymphony.xwork2.ValidationAwareSupport;

@SuppressWarnings("serial")
@Results({
    @Result(name="redirect", type="redirectAction", params = {"actionName" , "warehouse"})
})
public class PurchaseController extends ValidationAwareSupport implements  ServletRequestAware, ServletContextAware {

    private static Logger logger = LoggerFactory.getLogger(PurchaseController.class);
    
    protected HttpServletRequest request;
    private ServletContext context;
    private String id;
    private String itemId;
    private String itemNo;
    private String errorMsg="";
    
    private String purchaseOrderId;
    
    public String editNew(){
        purchaseOrderId = request.getParameter("poId");
        return "new";
    }
    
    public String create(){
        this.purchaseOrderId = request.getParameter("poId");
        long poId = Long.parseLong(purchaseOrderId);
        String invoiceNumber = request.getParameter("invoiceNo");
        String fc = request.getParameter("freightCharges").trim();
        double freightCharges = 0;
        if(fc != null && !fc.isEmpty())
            freightCharges = Double.parseDouble(fc);
        try {
            PurchaseClient purchaseClient = new PurchaseClient();
            in.shop2020.purchase.PurchaseService.Client client = purchaseClient.getClient();
            id = "" + client.startPurchase(poId, invoiceNumber, freightCharges);
        } catch (TTransportException e) {
            errorMsg = "Error while establishing connection to the warehouse server";
            logger.error(errorMsg, e);
        } catch (TException e) {
            errorMsg = "Error while scanning in the item";
            logger.error(errorMsg, e);
        } catch (PurchaseServiceException e) {
            errorMsg = e.getMessage();
            logger.error(errorMsg, e);
        }
        
        if(errorMsg.isEmpty())
            return "create";
        else{
            addActionError(errorMsg);
            return "new";
        }
            
    }
    
    public String show(){
        return "show";
    }
    
    public String update(){
        long id = Long.parseLong(this.id);
        String itemNumber = request.getParameter("itemNo");
        String imeiNumber = request.getParameter("imeiNo");
        
        try {
            WarehouseClient warehouseClient = new WarehouseClient();
            Client client = warehouseClient.getClient();
            long warehouseId = 7;
            InventoryItem inventoryItem = client.createSerializedInventoryItemFromItemNumber(itemNumber, imeiNumber, id);
            client.scanSerializedItem(inventoryItem.getId(), ScanType.PURCHASE, warehouseId);
            in.shop2020.model.v1.catalog.InventoryService.Client catalaogClient = new CatalogClient().getClient();
            catalaogClient.addInventory(inventoryItem.getItemId(), warehouseId, 1);
        } catch (TTransportException e) {
            errorMsg = "Error while establishing connection to the warehouse server";
            logger.error(errorMsg, e);
        } catch (WarehouseServiceException e) {
            errorMsg = e.getMessage();
            logger.error(errorMsg, e);
        } catch (TException e) {
            errorMsg = "Error while scanning in the item";
            logger.error(errorMsg, e);
        } catch (InventoryServiceException e) {
            errorMsg = "Error while incresing item's inventory availability";
            logger.error(errorMsg, e);
        }
        if(!errorMsg.isEmpty()){
            addActionError(errorMsg);
        }
        return "show";
    }
    
    public String destroy(){
        long id = Long.parseLong(this.id);
        
        try {
            PurchaseClient warehouseClient = new PurchaseClient();
            in.shop2020.purchase.PurchaseService.Client client = warehouseClient.getClient();
            client.closePurchase(id);
        }catch (TTransportException e) {
            errorMsg = "Error while establishing connection to the warehouse server";
            logger.error(errorMsg, e);
        } catch (TException e) {
            errorMsg = "Error while scanning in the item";
            logger.error(errorMsg, e);
        } catch (PurchaseServiceException e) {
            errorMsg = e.getMessage();
            logger.error(errorMsg, e);
        }
        return "redirect";
    }

    public String createItemNumberMapping() {
        long itemIdLong = Long.parseLong(itemId);

        try {
            Client warehouseClient = new WarehouseClient().getClient();
            warehouseClient.createItemNumberMapping(itemNo, itemIdLong);
        } catch (TTransportException e) {
            logger.error("Could not create thrift client", e);
        } catch (TException e) {
            logger.error("Could not create item number mapping", e);
        }

        return show();
    }

    public void setId(String id){
        this.id = id;
    }
    
    public String getId(){
        return id;
    }
    
    public String getErrorMessage(){
        return errorMsg;
    }
    
    public String getPurchaseOrderId() {
        return purchaseOrderId;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    
    @Override
    public void setServletContext(ServletContext context) {
        this.context = context;
    }

    public String getServletContextPath() {
        return context.getContextPath();
    }

    public String getItemId() {
        return itemId;
    }

    public void setItemId(String itemId) {
        this.itemId = itemId;
    }

    public String getItemNo() {
        return itemNo;
    }

    public void setItemNo(String itemNo) {
        this.itemNo = itemNo;
    }

}