package siprp.pagina;

import com.evolute.utils.arrays.*;
import com.evolute.utils.strings.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import java.lang.reflect.Array;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.velocity.*;
import org.apache.velocity.app.*;

public class doGetListaTrabalhadores extends siprpServlet{
    
    /** Creates a new instance of doGetListaTrabalhadores */
    public doGetListaTrabalhadores(HttpServletRequest req, HttpServletResponse res, String query) throws IOException
    {
		boolean print = false;
		if( query != null )
		{
			print = query.indexOf( "_print" ) != -1;
			if( query.indexOf( "trabalhadores_tudo" ) == 0 )
			{
				new doGetListaTrabalhadoresTudo( req, res, print );
				return;
			}
			else if( query.indexOf( "trabalhadores_pendentes" ) == 0 )
			{
				new doGetListaTrabalhadoresPendentes( req, res, print );
				return;
			}
		}
        ServletOutputStream out = res.getOutputStream();
        Connection con = null ;
        Statement stmt = null ;
        ResultSet2DArray rs, rsTrab;
        StringBuffer sBuffer;
        String userRole, empresaId, estabelecimentoId, temp;
        HttpSession session = req.getSession(false);
        Vector links = new Vector();
        Vector desc = new Vector();
        Vector descAdicional = new Vector();
		java.util.Date today = new java.util.Date();
        try
        {   
            userRole = (String)session.getAttribute(super.sessionUserRole);
            empresaId = (String)session.getAttribute(super.sessionEmpresaId);
            estabelecimentoId = (String)session.getAttribute(super.sessionEstabelecimentoId);
            
               if ( userRole.equals ( super.superUserRole ) || userRole.equals ( empresaId )  )
               {    
                    Class.forName(super.bdDriver);
                    con = DriverManager.getConnection( bdLocalUrl, bdLocalUsername, bdLocalPassword );   
                    if ( super.verificaEstabelecimento(con, empresaId, estabelecimentoId) ) // estabelecimento pertence à empresa ??
                    {
                        //Class.forName(super.bdDriver);
                        //con = DriverManager.getConnection( super.bdUrl, super.bdUsername, super.bdPassword );   
                        String dbQuery = "SELECT id, nome, nome_plain FROM trabalhadores WHERE inactivo <> 'y' AND data_demissao IS NULL AND estabelecimento_id = '"+estabelecimentoId+"' ORDER BY nome_plain";
                        stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
                        rsTrab = new ResultSet2DArray( stmt.executeQuery( dbQuery ) );
						rsTrab.getObjects();
                        stmt.close();
						
                        final int max = rsTrab.columnLength();
                    
                        for ( int index = 0; index < max; index++ )
                        {
							Integer id = (Integer)rsTrab.get(index,0);
							String link = "/"+super.servletName+"/?"+empresaId+"/"+estabelecimentoId+"/"+id;
                            links.add(link);
							HashMap trabalhador = new HashMap();
							trabalhador.put( "Nome", (String)rsTrab.get(index,1) );
							
							
							dbQuery = "SELECT id, data, estado FROM marcacoes_trabalhador "
							+ "WHERE tipo = 1 and trabalhador_id = " + id
							+ " ORDER BY data DESC";
							stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
							rs = new ResultSet2DArray( stmt.executeQuery( dbQuery ) );
							rs.getObjects();
							stmt.close();
							if( rs.columnLength() > 0 )
							{
								java.util.Date dataConsulta2 = ( java.util.Date ) rs.get( 0, 1 );
								Integer estado2 = ( Integer ) rs.get( 0, 2 );
								java.util.Date dataConsulta1;
		//						java.util.Date dataRelatorio1;
		//						java.util.Date dataRelatorio2 = (java.util.Date) rs.get( 0, 3 );
								Integer estado1;
								String realizada1 = "";
								String realizada2 = "";
								if( rs.columnLength() >= 2 )
								{
									dataConsulta1 = ( java.util.Date ) rs.get( 1, 1 );
									estado1 = ( Integer ) rs.get( 1, 2 );
		//							dataRelatorio1 = (java.util.Date) rs.get( 1, 3 );
								}
								else
								{
									dataConsulta1 = dataConsulta2;
									estado1 = estado2;
		//							dataRelatorio1 = dataRelatorio2;
								}
								if( ESTADO_REALIZADO.equals( estado2 ) || today.after( dataConsulta2 ) )
								{
									trabalhador.put( "ultima_consulta", dataConsulta2 );
									if( estado2.equals( ESTADO_POR_REALIZAR ) )
									{
										realizada2 = "n&atilde;o";
									}
									else if( estado2.equals( ESTADO_REALIZADO ) )
									{
										realizada2 = "sim";
									}
									trabalhador.put( "realizada", realizada2 );
									trabalhador.put( "proxima_consulta", "" );
								}
								else
								{
									try
									{
										for( int c = 1; c < rs.columnLength(); c++ )
										{
											java.util.Date dataTemp = ( java.util.Date ) rs.get( c, 1 );
											dataConsulta1 = dataTemp;
											estado1 = ( Integer ) rs.get( c, 2 );
											if( dataTemp.after( today ) )
											{
												dataConsulta2 = dataTemp;
											}
											else
											{
												break;
											}
										}
									}
									catch( Exception ex )
									{
										ex.printStackTrace();
									}
									trabalhador.put( "proxima_consulta", dataConsulta2 );
									
									if( !dataConsulta2.equals( dataConsulta1 ) )
									{
										if( estado1.equals( ESTADO_POR_REALIZAR ) )
										{
											realizada1 = "n&atilde;o";
										}
										else if( estado1.equals( ESTADO_REALIZADO ) )
										{
											realizada1 = "sim";
										}
										trabalhador.put( "realizada", realizada1 );
										trabalhador.put( "ultima_consulta", dataConsulta1 );
									}
									else
									{
										trabalhador.put( "ultima_consulta", "" );
										trabalhador.put( "realizada", null );
									}
								}
							}
							else
							{
								trabalhador.put( "ultima_consulta", "" );
								trabalhador.put( "realizada", null );
								trabalhador.put( "proxima_consulta", "" );
							}

							
							dbQuery = "SELECT id, data, estado FROM marcacoes_trabalhador "
							+ "WHERE tipo = 0 and trabalhador_id = " + id
							+ " ORDER BY data DESC";
							stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
							rs = new ResultSet2DArray( stmt.executeQuery( dbQuery ) );
							rs.getObjects();
							stmt.close();
							if( rs.columnLength() > 0 )
							{
								java.util.Date dataConsulta2 = ( java.util.Date ) rs.get( 0, 1 );
								Integer estado2 = ( Integer ) rs.get( 0, 2 );
								Integer estado1;
								java.util.Date dataConsulta1;
		//						java.util.Date dataRelatorio1;
		//						java.util.Date dataRelatorio2 = (java.util.Date) rs.get( 0, 3 );
								String realizada1 = "";
								String realizada2 = "";
								if( rs.columnLength() >= 2 )
								{
									dataConsulta1 = ( java.util.Date ) rs.get( 1, 1 );
									estado1 = ( Integer ) rs.get( 1, 2 );
		//							dataRelatorio1 = (java.util.Date) rs.get( 1, 3 );
								}
								else
								{
									dataConsulta1 = dataConsulta2;
									estado1 = estado2;
		//							dataRelatorio1 = dataRelatorio2;
								}
								if( ESTADO_REALIZADO.equals( estado2 ) || today.after( dataConsulta2 ) )
								{
									trabalhador.put( "ultimo_exame", dataConsulta2 );
									if( estado2.equals( ESTADO_POR_REALIZAR ) )
									{
										realizada2 = "n&atilde;o";
									}
									else if( estado2.equals( ESTADO_REALIZADO ) )
									{
										realizada2 = "sim";
									}
									trabalhador.put( "realizado", realizada2 );
									trabalhador.put( "proximo_exame", "" );
								}
								else
								{
									trabalhador.put( "proximo_exame", dataConsulta2 );
									if( !dataConsulta2.equals( dataConsulta1 ) )
									{
										if( estado1.equals( ESTADO_POR_REALIZAR ) )
										{
											realizada1 = "n&atilde;o";
										}
										else if( estado1.equals( ESTADO_REALIZADO ) )
										{
											realizada1 = "sim";
										}
										trabalhador.put( "realizado", realizada1 );
										trabalhador.put( "ultimo_exame", dataConsulta1 );
									}
									else
									{
										trabalhador.put( "ultimo_exame", "" );
										trabalhador.put( "realizado", null );
									}
								}
							}
							else
							{
								trabalhador.put( "ultimo_exame", "" );
								trabalhador.put( "realizado", null );
								trabalhador.put( "proximo_exame", "" );
							}
							
                            desc.add( trabalhador );
                        }
                        
                        
                        sBuffer = new StringBuffer();
                        sBuffer.append("<b>"+super.nomeEmpresa(con,empresaId)+"</b><br><br><i>"
                            +super.nomeEstabelecimento(con, estabelecimentoId)+"</i>" );

						HashMap hmValues = new HashMap();
						hmValues.put( "empresa_nome", session.getAttribute( sessionCompanyName ) );
						hmValues.put( "empresa_id", session.getAttribute( sessionEmpresaId ) );
						hmValues.put( "estabelecimento_nome", super.nomeEstabelecimento( con, estabelecimentoId ) );
						hmValues.put( "estabelecimento_id", estabelecimentoId );
						hmValues.put( "userRole", userRole );
						hmValues.put( "userName", session.getAttribute( sessionUser ) );
						hmValues.put( msgTemplate , sBuffer.toString() ) ;
						hmValues.put( templateUserRole, userRole);
						hmValues.put( templateQuery, super.queryStringTrabalhadores );
						hmValues.put( templateVector1,links);
						hmValues.put( templateVector2,desc);
						hmValues.put( templateVector3,null);
						if( !print )
						{
							out.println( mergeTemplate( hmValues, super.authenticatedUserTemplate));  
						}
						else
						{
							out.println( mergeTemplate( hmValues, super.authenticatedUserPrintTemplate));  
						}
//                        out.println( mergeTemplate( sBuffer.toString(), userRole, super.queryStringTrabalhadores, links, desc, null, super.authenticatedUserTemplate) ); 
                    }
                    else  // est não pertence à empresa
                    {
                        out.println( mergeTemplate( super.msgLinkFormatError , userRole, super.errorTemplate) );
                    }
                    con.close();
                }
               else // Role não permite ver esta informação
               {
                    out.println( mergeTemplate( super.msgAcessoNegado , userRole,  super.errorTemplate) );
               }
        }
        catch ( SQLException e )
        {
            e.printStackTrace();
            out.println( mergeTemplate( super.msgErroBd , super.errorTemplate) );
        }
        catch ( Exception e )
        {
            e.printStackTrace();
            out.println( mergeTemplate( super.msgGenericError , super.errorTemplate) );
        }
    }
    
}
