/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cosmodas.compras;

import com.cosmodas.FacadeCosmos.ComprasFacadeLocal;
import com.cosmodas.FacadeCosmos.GeneralesFacadeLocal;
import com.cosmodas.FacadeCosmos.ProductosFacadeLocal;
import com.cosmodas.EntCosmos.Compras;
import com.cosmodas.EntCosmos.Generales;
import com.cosmodas.EntCosmos.Productos;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
//import net.sf.jasperreports.engine.JRException;
//import net.sf.jasperreports.engine.JasperExportManager;
//import net.sf.jasperreports.engine.JasperFillManager;
//import net.sf.jasperreports.engine.JasperPrint;
//import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
//import org.primefaces.context.RequestContext;

/**
 *
 * @author obper
 */
@ManagedBean(name = "compras", eager = true)
@ViewScoped
public class ComprasBeans implements Serializable{
    
    //----------------------------EJB------------------------------
    @EJB
    ProductosFacadeLocal productosFacadeLocal;
    @EJB
    GeneralesFacadeLocal generalesFacade;
    @EJB
    ProductosFacadeLocal prodlocal;
    @EJB
    ComprasFacadeLocal comprasFacade;
    
//-------------------------sesion-------------------------------

    private String codigoCompra;
    private String tipoCompra;
    private String conceptoCompra;
    private String productoCodigo;
    private String productoNombre;
    private String productoCantidad;
    private String productoPrecio;
    private List<CuerpoCompra> compras;
    private CuerpoCompra compra;
    private Date compraFecha;
//    private JasperPrint jasperPrint;
    private boolean nuevaCompra;
    private Productos producto;
    private String fecha;

    public String getCodigoCompra() {
        return codigoCompra;
    }

    public void setCodigoCompra(String codigoCompra) {
        this.codigoCompra = codigoCompra;
    }

    public String getTipoCompra() {
        return tipoCompra;
    }

    public void setTipoCompra(String tipoCompra) {
        this.tipoCompra = tipoCompra;
    }

    public String getConceptoCompra() {
        return conceptoCompra;
    }

    public void setConceptoCompra(String conceptoCompra) {
        this.conceptoCompra = conceptoCompra;
    }

    public String getProductoCodigo() {
        return productoCodigo;
    }

    public void setProductoCodigo(String productoCodigo) {
        if(!productoCodigo.isEmpty()){
            seteaVariables(productoCodigo);}
        this.productoCodigo = productoCodigo;
    }

    public String getProductoNombre() {
        return productoNombre;
    }

    public void setProductoNombre(String productoNombre) {
        if(!productoNombre.isEmpty()){
            setProductoCodigo(porNombre(productoNombre));}
        this.productoNombre = productoNombre;
    }

    public String getProductoCantidad() {
        return productoCantidad;
    }

    public void setProductoCantidad(String productoCantidad) {
        this.productoCantidad = productoCantidad;
    }

    public String getProductoPrecio() {
        return productoPrecio;
    }

    public void setProductoPrecio(String productoPrecio) {
        this.productoPrecio = productoPrecio;
    }

    public List<CuerpoCompra> getCompras() {
        return compras;
    }

    public void setCompras(List<CuerpoCompra> compras) {
        this.compras = compras;
    }

    public CuerpoCompra getCompra() {
        return compra;
    }

    public void setCompra(CuerpoCompra compra) {
        this.compra = compra;
    }

    public Date getCompraFecha() {
        return compraFecha;
    }

    public void setCompraFecha(Date compraFecha) {
        this.compraFecha = compraFecha;
    }

    public boolean isNuevaCompra() {
        return nuevaCompra;
    }

    public void setNuevaCompra(boolean nuevaCompra) {
        this.nuevaCompra = nuevaCompra;
    }

    public Productos getProducto() {
        return producto;
    }

    public void setProducto(Productos producto) {
        this.producto = producto;
    }

    //--------------------------------------------------------------   
    
        public void seteaVariables(String llave){
        if(llave.isEmpty()){   
        }else{
        traerProc(llave);
        }
        
    }
        public void traerProc(String productoCodigo){
        setProducto(productosFacadeLocal.find(productoCodigo));
        this.productoNombre = getProducto().getProductoNombre();
        this.productoCodigo = getProducto().getProductoCodigo();

    }
    
    
        public void nuevoProducto(){  
            CuerpoCompra cue = new CuerpoCompra();
            cue.setProductoCodigo(productoCodigo);
            cue.setProductoNombre(productoNombre);
            cue.setProductoPrecio(productoPrecio);
            cue.setProductoCantidad(productoCantidad);
   
        setCompra(cue);
    }       
        
        
        
        public boolean validaExistenciaPedido(){
        
        boolean out = false;    
        List<CuerpoCompra> q = new ArrayList<>();
        q = getCompras();
        for(CuerpoCompra i : q){
        if (i.getProductoCodigo().equals(getProductoCodigo())) {
        out = true;
            }else{
            out = false;  
                 }
            }
       return out;
       }    
    
    public void borrar(){
    this.productoCodigo = new String();
    this.productoNombre = new String();
    this.productoPrecio = new String();
    this.productoCantidad = new String();
    compra = new CuerpoCompra();
    }      
       
    
        public List<String> complete(String query){	        // Assumed Datasource
	List<Productos> q = new ArrayList<>();
//        precioPrograma = precioprogramaFacadeLocal.;
        q = prodlocal.porNombre("%"+query+"%");
   //     setListaProductos(q);
        List ai = new ArrayList();
            for(Productos i : q){
                if("13".equals(i.getDiscontinuado())){
                }else{
                ai.add(i.getProductoNombre());}
              }
    return ai;
    }
        
        public  String porNombre(String productoNombre){
        String prCod = null;
        if(productoNombre.isEmpty()){
        }else{
        Productos pr=  prodlocal.busquedaPorNombre(productoNombre);
         prCod = pr.getProductoCodigo();       
        }    
        return prCod;
        }
    
        
        
        
//          public void fillReport() throws JRException{ 
//              
//        JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(compras);  
//        String reportPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/reportes/requisicionReport.jasper");     
//        Map parametros = new HashMap();
//        jasperPrint = JasperFillManager.fillReport(reportPath, parametros, beanCollectionDataSource);
//    }
    
//    public void EnviarCorreo(ActionEvent actionEvent) throws JRException, IOException{
//        try {
//            fillReport();
//            JasperExportManager.exportReportToPdfFile( jasperPrint, "/tmp/requisicion-"+sala+".pdf");
//            JasperExportManager.exportReportToPdfFile( jasperPrint, "/home/pedidos/requisicion-"+sala+".pdf");
//            setDirReq("/tmp/requisicion-"++".pdf");
// 
//           Email mail = new Email();
//            mail.imailReq("operez@marlenlamur-es.com", "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//            mail.imailReq("programador@marlenlamur-es.com", "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//            mail.imailReq("sistemas@marlenlamur-es.com", "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//            mail.imailReq("jlogistica@marlenlamur-es.com", "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//            mail.imailReq("auxbodega@marlenlamur-es.com", "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//            mail.imailReq(correo, "requisicion-"+sala+".pdf", sala, getDirReq(), correo);
//                       FacesContext context = FacesContext.getCurrentInstance();
//                       context.addMessage(null, new FacesMessage("Enviado",  "Enviado Sastifactoriamente"));                 
//                } catch (Exception e) {
//                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "ERROR", "NO SE PUEDE enviar Correo");  
//                RequestContext.getCurrentInstance().showMessageInDialog(message);
//                }
//
//            }         
//       
    
          
    @PostConstruct
    public void init() {
         compra = new CuerpoCompra();
         compras = new ArrayList<CuerpoCompra>();
//         this.encargado = log.getUsersAndPass().getNombreEmpleado();
//         this.correo = log.getUsersAndPass().getCorreo();
//         this.sala = log.getUsersAndPass().getDepartamento();
         SimpleDateFormat formateador = new SimpleDateFormat("dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));  
         Date date = new Date ();
         String f = formateador.format(date);
         this.fecha = f;
         
    }
    
//    public void PDF(ActionEvent actionEvent) throws JRException, IOException{
//       fillReport();
//       HttpServletResponse httpServletResponse=
//               (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
//       ServletOutputStream servletOutputStream=httpServletResponse.getOutputStream();    
//       JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
//   }
//    
//            public void createNew() {
//        //nuevoProducto();
//        if (compras.isEmpty()) {
//            compras.add(compra);
//        }else if(validaExistenciaPedido()){
//        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "DUPLICADO", "El producto Ya esta en la Factura");  
//        RequestContext.getCurrentInstance().showMessageInDialog(message);
//        }else {
//        compras.add(compra);
//        compra = new CuerpoCompra(); 
//               }     
//        }
//            
//        public String reinit() {
//        compra = new CuerpoCompra();      
//        return null;
//    }  
//    
//    public void LimpiarPantalla(ActionEvent actionEvent){
//        try{
//            compras = new ArrayList<>();
//            compra = new CuerpoCompra();
//            borrar();
//    
//        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "CORRECTO", "CORRECTO");  
//        RequestContext.getCurrentInstance().showMessageInDialog(message);
//    
//        }catch(Exception e){
//        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "NO SE PUEDE LIMPIAR PANTALLA");  
//        RequestContext.getCurrentInstance().showMessageInDialog(message);
//        }
//    }
//    
//    public  void GuardarCompraTemporal(ActionEvent actionEvent){
//    
//    Generales gn = generalesFacade.findAll().get(0);
//        
//     Compras cm = new Compras();
//    
//        try {
//                cm.setCompraCodigo(codigoCompra);
//                cm.setCompraFecha(compraFecha);
//                cm.setConceptoCompra(conceptoCompra);
//                cm.setProgramaCodigo(gn.getProducto());
//                System.out.println(cm.getProgramaCodigo());
//                //comprasFacade.create(cm);
//                
//        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "CORRECTO", "CORRECTO");  
//        RequestContext.getCurrentInstance().showMessageInDialog(message);
//                
//        } catch (Exception e) {
//        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "NO SE PUEDE LIMPIAR PANTALLA");  
//        RequestContext.getCurrentInstance().showMessageInDialog(message);
//        }
//
//
//    
//    
//    
//    }
//    
    
//           public void GuadarCompraTemporal(ActionEvent actionEvent) {
//        Ajuste a = new Ajuste();
//             
//        String sucursal1 = getSucursal();
//        
//        a.setAjusteCodigo(getAjusteCodigo());
//        a.setAjusteFecha(d);
//        a.setProgramaCodigo(getPrograma());
//        a.setAjusteObservacion("AJUSTE POR CIERRE MENSUAL");
//        a.setAjusteInventario("SALIDA");
//        a.setSucursalCodigo(daoA.getSucurasal(getSucursal()));
//        a.setAjusteEnvio("F");
//             daoA.IngresarAjusteCabecera(a);
//            
//            DetalleAjustePK detpk = new DetalleAjustePK();
//            DetalleAjuste det = new DetalleAjuste();            
//            List<VAutoAjuste> detAj = new ArrayList<VAutoAjuste>();
//            detAj = daoA.salida(sucursal1);
//            //ArrayList<DetalleAjuste> e = new ArrayList<>();
//                        
//            for(VAutoAjuste deta : detAj) {     
//                        detpk.setAjusteCodigo(ajusteCodigo);
//                        detpk.setProductoCodigo(deta.getProductoCodigo());
//                        det.setDetalleAjustePK(detpk);
//                        det.setDetalleAjusteCantidad(deta.getDetalleAjusteCantidad());
//                        det.setDetalleAjustePrecio(deta.getDetalleAjustePrecio());
//                        det.setDetalleAjusteTipo(deta.getDetalleAjusteTipo());
//                        System.out.println(det);
//                        daoA.addDetalleAjuste(det);
//
//         }
//            addMessage("Ajuste de salida Ingresado","Ajuste "+getAjusteCodigo());
//         }
    
     public ComprasBeans() {
    }
         
    
}
