using System;
using System.Collections.Generic;
using System.Linq;
using System.Configuration;
using System.Text;
using System.Data;
using MySql.Data.MySqlClient;
using fatd_faturamento.ENTIDADE;
using fatd_faturamento.DAL.Conexao;

namespace fatd_faturamento.DAL.Persistencia
{
    public class dalOs
    {
        string vFILTER = null;
        string vINNERJOIN = null;
        string vAND = null;
        string vORDERBY = null;

        #region Métodos

        public DataTable Select(entidadeOs objOs)
        {
            DataTable dt = null;
            MySqlCommand cmd = null;
            IGerenciadorTransacao objGerenciadorTransacao = null;
            ConexaoBD objconexaoBD = null;


            try
            {
                objconexaoBD = new ConexaoBD();

                objconexaoBD.SetarConexaoBanco(TipoBDConexao.fat_BD);

                using (objGerenciadorTransacao = FabricaGerenciadorTransacao.GetGerenciador(TipoBDGerenciador.MySql))
                {

                    vAND = vAND + "SELECT ";
                    //NÍVEL DE TENSÃO
                    vAND = vAND + "       O1.SEQUENCIA_OS O1_SEQUENCIA_OS, ";
                    vAND = vAND + "       O1.ID O1_ID, ";
                    vAND = vAND + "       O1.ID_SUB O1_ID_SUB, ";
                    vAND = vAND + "       O1.DATA O1_DATA, ";
                    vAND = vAND + "       O1.DATA_PROJETO O1_DATA_PROJETO, ";
                    vAND = vAND + "       O1.DATA_CONCLUSAO O1_DATA_CONCLUSAO, ";
                    vAND = vAND + "       O1.DATA_REPROVACAO O1_DATA_REPROVACAO, ";
                    vAND = vAND + "       O1.DATA_CANCELAMENTO O1_DATA_CANCELAMENTO, ";
                    vAND = vAND + "       O1.DATA_OCORRENCIA O1_DATA_OCORRENCIA, ";
                    vAND = vAND + "       O1.STATUS O1_STATUS, ";
                    vAND = vAND + "       O1.STATUS_SUB O1_STATUS_SUB, ";
                    //LAUDO
                    vAND = vAND + "       LA.DATA_INICIAL LA_DATA_INICIAL, ";
                    vAND = vAND + "       LA.DATA_FINAL LA_DATA_FINAL, ";
                    vAND = vAND + "       LA.PROCEDENTE LA_PROCEDENTE, ";
                    vAND = vAND + "       LA.DRP, ";
                    vAND = vAND + "       LA.DRPM, ";
                    vAND = vAND + "       LA.DRC, ";
                    vAND = vAND + "       LA.DRCM, ";
                    //CORREÇÃO
                    vAND = vAND + "       O2.DATA O2_DATA, ";
                    vAND = vAND + "       O2.DATA_PROJETO O2_DATA_PROJETO, ";
                    vAND = vAND + "       O2.DATA_CONCLUSAO O2_DATA_CONCLUSAO, ";
                    vAND = vAND + "       O2.DATA_REPROVACAO O2_DATA_REPROVACAO, ";
                    vAND = vAND + "       O2.DATA_CANCELAMENTO O2_DATA_CANCELAMENTO, ";
                    vAND = vAND + "       O2.STATUS O2_STATUS, ";
                    vAND = vAND + "       O2.STATUS_SUB O2_STATUS_SUB, ";
                    vAND = vAND + "       IFNULL(RESSARCIMENTO_NIVEL_TENSAO.RE_DRP,LA.DRP) RE_DRP, ";
                    vAND = vAND + "       IFNULL(RESSARCIMENTO_NIVEL_TENSAO.RE_DRPM,LA.DRPM) RE_DRPM, ";
                    vAND = vAND + "       RESSARCIMENTO_NIVEL_TENSAO.RE_K1, ";
                    vAND = vAND + "       IFNULL(RESSARCIMENTO_NIVEL_TENSAO.RE_DRC,LA.DRC) RE_DRC, ";
                    vAND = vAND + "       IFNULL(RESSARCIMENTO_NIVEL_TENSAO.RE_DRCM,LA.DRCM) RE_DRCM, ";
                    vAND = vAND + "       RESSARCIMENTO_NIVEL_TENSAO.RE_K2 ";
                    vAND = vAND + "  FROM " + ConfigurationManager.AppSettings["table_lc"] + ".OS O1 ";
                    vAND = vAND + "  LEFT JOIN " + ConfigurationManager.AppSettings["table_fat"] + ".RESSARCIMENTO_NIVEL_TENSAO ";
                    vAND = vAND + "         ON(RESSARCIMENTO_NIVEL_TENSAO.NV_PROTOCOLO = O1.ID AND ";
                    vAND = vAND + "            RESSARCIMENTO_NIVEL_TENSAO.NV_PROTOCOLO_SUB = O1.ID_SUB AND ";
                    vAND = vAND + "            RESSARCIMENTO_NIVEL_TENSAO.NV_SEQUENCIA_OS = O1.SEQUENCIA_OS), ";
                    vAND = vAND + "       " + ConfigurationManager.AppSettings["table_lc"] + ".UC, ";
                    vAND = vAND + "       " + ConfigurationManager.AppSettings["table_lc"] + ".LAUDO_TENSAO LA, ";
                    vAND = vAND + "       " + ConfigurationManager.AppSettings["table_lc"] + ".OS O2 ";
                    vAND = vAND + " WHERE UC.UNID_ID_FATWIN = ?UNID_ID_FATWIN ";
                    vAND = vAND + "   AND UC.GRUPO = ?GRUPO ";
                    //NÍVEL DE TENSÃO
                    vAND = vAND + "   AND O1.ID_UC = UC.ID ";
                    vAND = vAND + "   AND O1.ID_CLASS_COMERCIAL = '20.06' ";
                    vAND = vAND + "   AND O1.STATUS = 'CONCLUÍDA' ";
                    vAND = vAND + "   AND O1.STATUS_SUB = 'APROVADA' ";
                    //LAUDO
                    vAND = vAND + "   AND LA.ID_CLASS_COMERCIAL = '20.06' ";
                    vAND = vAND + "   AND LA.PROTOCOLO = O1.ID ";
                    vAND = vAND + "   AND LA.ID_UC = O1.ID_UC ";
                    vAND = vAND + "   AND LA.PROCEDENTE = 1 ";
                    //CORREÇÃO
                    vAND = vAND + "   AND O2.ID_CLASS_COMERCIAL = '30.11.11' ";
                    vAND = vAND + "   AND O2.ID = O1.ID ";
                    vAND = vAND + "   AND O2.ID_CONSUMIDOR = O1.ID_CONSUMIDOR ";
                    vAND = vAND + "   AND O2.ID_UC = O1.ID_UC ";
                    vAND = vAND + " GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21 ";


                    cmd = new MySqlCommand(this.QueryExecute);


                    cmd.Parameters.AddWithValue("?UNID_ID_FATWIN", objOs.CONSUMIDOR_NOVO_SOCIO);
                    cmd.Parameters.AddWithValue("?GRUPO", objOs.ACAO.ToString().ToUpper());

                    dt = objGerenciadorTransacao.GetDataTable(cmd);
                }

                return dt;
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (cmd != null)
                    cmd.Dispose();
            }
        }

        #endregion

        #region " Comandos SQL "

        StringBuilder sb = new StringBuilder();


        protected string QueryInsert
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("INSERT INTO  ");
                this.sb.AppendLine("OS SET  ");
                this.sb.AppendLine(vFILTER);

                return sb.ToString();
            }
        }

        protected string QueryUpdate
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("UPDATE  ");
                this.sb.AppendLine("OS SET  ");
                this.sb.AppendLine(vFILTER);
                this.sb.AppendLine("WHERE 1 = 1 ");
                this.sb.AppendLine(vAND);

                return sb.ToString();
            }
        }

        protected string QueryDelete
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("DELETE FROM OS ");
                this.sb.AppendLine("WHERE 1 = 1 ");
                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        protected string QuerySelect
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine("SELECT ");
                this.sb.AppendLine(vFILTER);
                this.sb.AppendLine("FROM ");
                this.sb.AppendLine("OS  ");
                this.sb.AppendLine(vINNERJOIN);
                this.sb.AppendLine("WHERE 1 = 1  ");
                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        protected string QueryExecute
        {
            get
            {
                this.sb.Clear();

                this.sb.AppendLine(vAND);
                this.sb.AppendLine(vORDERBY);

                return sb.ToString();
            }
        }

        #endregion


    }
}
