# -*- coding: utf-8 -*-#
#!/usr/bin/env python

__author__='Mario Lacunza <mlacunza@gmail.com>'
__version__='0.1'

""" 
Archivo inicial para la Aplicacion.

Equivale al EXE

"""
import os
import wx
import sqlite3
import time
import csv, codecs, cStringIO
import wx.grid as gridlib
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class RepTelef(wx.App):
    """Clase Inicial."""

    def OnInit(self):

        frame=GUI(None,-1,'SISCAT - AUDITORIA MEDICA')
        frame.Show()
        self.SetTopWindow(frame)
        
        return True

#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class GUI(wx.Frame):
    def __init__(self, parent, id='', title='', pos=wx.DefaultPosition, size=(900, 650),
                          style=wx.DEFAULT_FRAME_STYLE | wx.SUNKEN_BORDER | wx.CLIP_CHILDREN):
        
        wx.Frame.__init__(self, parent, id, title, pos, size, style)
        self.SetMinSize((640,480))
        self.Center(wx.BOTH)
        
        panel=wx.Panel(self)
        
        AppPath=os.getcwd()
        DBPath=self.EscogerDB()
        
        mGlobal=modGlobals()
        mGlobal.setDBPath(DBPath)
        mGlobal.serAppPath(AppPath)
        
        if DBPath!=None:
            self.nb = mNotebook(panel,-1)
        else:
            self.Destroy()
#------------------------------------------------------------------------------

    def EscogerDB(self):
        wildcard = "Base de datos (*.db)|*.db"
        
        dlg = wx.FileDialog(
            self, message="Escoger archivo de Base de datos",
            defaultDir=os.getcwd(),defaultFile="",wildcard=wildcard,
            style=wx.OPEN | wx.CHANGE_DIR)

        if dlg.ShowModal() == wx.ID_OK:
            paths = dlg.GetPaths()
            for path in paths:
                dd=path
            return dd
        else:
            self.Destroy()
            
#------------------------------------------------------------------------------

class Registro(wx.Panel):
    
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        
        self.HoraFin=None
        self.DiaHoy=time.localtime()
        
        self.oGlobal=modGlobals()
        
        self.odat=database(self.oGlobal.DB_PATH)
        self.HoraInicio=None
        self.HoraFin=None
        
        self.CrearControles()
        self.CrearSizers()
        self.CargarUsers()
        self.CargarBrokers()
        self.CargarTipConsulta()
        self.CargarTipLlamante()
        self.CargarClinicas()
        self.CargarRamos()
        
#------------------------------------------------------------------------------

    def CrearControles(self):
        self.lblArea = wx.StaticText(parent=self, id=-1, label=u'AREA', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtArea=wx.TextCtrl(parent=self, id=-1, value = u'Consultas', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        
        self.lbluser = wx.StaticText(parent=self, id=-1, label=u'USUARIO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboUser = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0, validator=wx.DefaultValidator, name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtCboUser, self.cboUser)
        
        self.lblCodAuto = wx.StaticText(parent=self, id=-1, label=u'COD AUT', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtCodAuto=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        
        self.lblFecha = wx.StaticText(parent=self, id=-1, label=u'FECHA', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtFecha=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        self.txtHoraLlegada=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        
        self.lblTipLlamante = wx.StaticText(parent=self, id=-1, label=u'TIPO DE LLAMANTE', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboTipLlamante = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0,validator=wx.DefaultValidator, name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboTipLlamante, self.cboTipLlamante)
        
        self.lblRamo = wx.StaticText(parent=self, id=-1, label=u'RAMO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboRamo = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0,validator=wx.DefaultValidator, 
                                            name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboRamo, self.cboRamo)
        
        self.lblTipConsulta = wx.StaticText(parent=self, id=-1, label=u'TIPO DE CONSULTA', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboTipConsulta = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0,validator=wx.DefaultValidator, 
                                   name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboTipConsulta, self.cboTipConsulta)
        
        self.lblContacto = wx.StaticText(parent=self, id=-1, label=u'CONTACTO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtContacto=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        self.txtContacto.SetToolTipString(u'Telef. 1 - Teléfono principal')
        
        self.lblAsegurado = wx.StaticText(parent=self, id=-1, label=u'ASEGURADO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtAsegurado=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        
        self.lblTelefono = wx.StaticText(parent=self, id=-1, label=u'TELEFONO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtTelefono=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        self.txtTelefono.SetToolTipString(u'Telef. 1 - Teléfono principal')
        
        self.lblestado = wx.StaticText(parent=self, id=-1, label=u'ESTADO', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboestado = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=['ATENDIDO','GRUPO BACK','PENDIENTE','PENDIENTE-RESUELTO'], style=0,
                                   validator=wx.DefaultValidator,name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.Evtcboestado, self.cboestado)
        
        self.lblObserv = wx.StaticText(parent=self, id=-1, label=u'OBSERVACIONES', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtObserv=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,90), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER, 
                                 validator=wx.DefaultValidator,name=wx.TextCtrlNameStr)
        
        self.lblConsult = wx.StaticText(parent=self, id=-1, label=u'SE CONSULTO CON OTRA AREA?', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboConsult = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=['SI','NO'], style=0,validator=wx.DefaultValidator,name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboConsult, self.cboConsult)
        self.lblTranfer = wx.StaticText(parent=self, id=-1, label=u'SE TRANSFIRIO A?', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtTranfer=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator,
                                 name=wx.TextCtrlNameStr)
        
        
        self.lblbroker = wx.StaticText(parent=self, id=-1, label=u'LISTA DE BROKERS', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        
        self.cboBrokers = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0,
                                   validator=wx.DefaultValidator,name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboBrokers, self.cboBrokers)
        
        self.lblClinicas = wx.StaticText(parent=self, id=-1, label=u'LISTA DE CLINICAS', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.cboClinicas = wx.ComboBox(parent=self, id=-1, pos=wx.DefaultPosition, size=(250,24), 
                                   choices=[], style=0,
                                   validator=wx.DefaultValidator,name="choice")
        self.Bind(wx.EVT_COMBOBOX, self.EvtcboClinicas, self.cboClinicas)
        
        
        self.lblEmpresa = wx.StaticText(parent=self, id=-1, label=u'EMPRESA', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtEmpresa=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        self.txtEmpresa.SetToolTipString(u'Telefonica : poner Telefonica cuando nos llame algún asegurado de esta empresa')
        
        self.lblQuien = wx.StaticText(parent=self, id=-1, label=u'CON QUIEN?', 
                                     pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,name="staticText")
        self.txtQuien=wx.TextCtrl(parent=self, id=-1, value = u'', pos=wx.DefaultPosition, 
                                 size=(250,24), style=0, validator=wx.DefaultValidator, 
                                 name=wx.TextCtrlNameStr)
        
        
        self.btnOk= wx.Button(parent=self, id=-1, label=u'GRABAR REGISTRO',pos=wx.DefaultPosition,
                              size=wx.DefaultSize, style=0)
        self.btnOk.SetToolTipString(u'Grabar Registro')
        self.Bind(wx.EVT_BUTTON, self.OnBtnOkButton, self.btnOk)

        self.btnIni= wx.Button(parent=self, id=-1, label=u'INICIO', 
                              pos=wx.DefaultPosition,size=wx.DefaultSize, style=0)
        self.btnIni.SetToolTipString(u'Inicio')
        self.Bind(wx.EVT_BUTTON, self.OnbtnIniButton, self.btnIni)
        
        self.btnExcel= wx.Button(parent=self, id=-1, label=u'EXPORTAR A EXCEL', 
                              pos=wx.DefaultPosition,size=wx.DefaultSize, style=0)
        self.btnExcel.SetToolTipString(u'Exportar a Excel')
        self.Bind(wx.EVT_BUTTON, self.OnbtnExcelButton, self.btnExcel)

        self.txtFecha.SetValue(time.strftime("%d/%m/%y", self.DiaHoy))
        self.txtHoraLlegada.SetValue(time.strftime("%H:%M:%S", self.DiaHoy))
#------------------------------------------------------------------------------

    def CrearSizers(self):
        bsSizer= wx.BoxSizer(wx.VERTICAL)
        
        fgTit=wx.FlexGridSizer(rows=1, cols=2, vgap=5, hgap=195)
        fgTitIzq=wx.FlexGridSizer(rows=9, cols=2, vgap=5, hgap=5)
        fgTitDer=wx.FlexGridSizer(rows=3, cols=1, vgap=5, hgap=5)
        fgCtrl=wx.FlexGridSizer(rows=1, cols=2, vgap=75, hgap=15)
        fgCtrlDer=wx.FlexGridSizer(rows=12, cols=2, vgap=5, hgap=5)
        fgCtrlIzq=wx.FlexGridSizer(rows=4, cols=2, vgap=5, hgap=5)
        fgBtn=wx.FlexGridSizer(rows=1, cols=3, vgap=155, hgap=55)
        
        fgTitIzq.Add(self.lblArea,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL,30)
        fgTitIzq.Add(self.txtArea,0,wx.ALIGN_LEFT,30)
        fgTitIzq.Add(self.lbluser,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL,30)
        fgTitIzq.Add(self.cboUser,0,wx.ALIGN_LEFT,30)
        fgTitIzq.Add(self.lblCodAuto,0,wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL,30)
        fgTitIzq.Add(self.txtCodAuto,0,wx.ALIGN_LEFT,30)
        fgTitDer.Add(self.lblFecha,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgTitDer.Add(self.txtFecha,0,wx.ALIGN_LEFT,30)
        fgTitDer.Add(self.txtHoraLlegada,0,wx.ALIGN_LEFT,30)
        
        fgCtrlDer.Add(self.lblTipLlamante,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.cboTipLlamante,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblRamo,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.cboRamo,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblTipConsulta,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.cboTipConsulta,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblContacto,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.txtContacto,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblAsegurado,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.txtAsegurado,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblTelefono,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.txtTelefono,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblestado,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.cboestado,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblObserv,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.txtObserv,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblConsult,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.cboConsult,0,wx.ALIGN_LEFT,30)
        fgCtrlDer.Add(self.lblTranfer,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlDer.Add(self.txtTranfer,0,wx.ALIGN_LEFT,30)
        
        fgCtrlIzq.Add(self.lblbroker,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlIzq.Add(self.cboBrokers,0,wx.ALIGN_LEFT,30)
        fgCtrlIzq.Add(self.lblClinicas,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlIzq.Add(self.cboClinicas,0,wx.ALIGN_LEFT,30)
        fgCtrlIzq.Add(self.lblEmpresa,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlIzq.Add(self.txtEmpresa,0,wx.ALIGN_LEFT,30)
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        fgCtrlIzq.Add((60,22))
        
        fgCtrlIzq.Add(self.lblQuien,0,wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL,30)
        fgCtrlIzq.Add(self.txtQuien,0,wx.ALIGN_LEFT,30)
        fgBtn.Add(self.btnIni,0,wx.ALIGN_CENTRE)
        fgBtn.Add(self.btnOk,0,wx.ALIGN_CENTRE)
        fgBtn.Add(self.btnExcel,0,wx.ALIGN_CENTRE)
        
        fgTit.Add(fgTitIzq,0,wx.ALIGN_LEFT,20)
        fgTit.Add(fgTitDer,0,wx.ALIGN_RIGHT,20)
        fgCtrl.Add(fgCtrlDer,0,wx.ALIGN_RIGHT,20)
        fgCtrl.Add(fgCtrlIzq,0,wx.ALIGN_RIGHT,20)
        
        bsSizer.Add(fgTit,0,wx.ALIGN_CENTRE,20)
        bsSizer.Add(wx.StaticLine(self), 0,wx.EXPAND|wx.TOP|wx.BOTTOM, 5)
        bsSizer.Add(fgCtrl,0,wx.ALIGN_CENTRE,20)
        bsSizer.Add(fgBtn,0,wx.ALIGN_CENTRE|wx.ALIGN_CENTER_VERTICAL,20)
        
        self.SetSizer(bsSizer)
        bsSizer.Fit(self)
        bsSizer.SetSizeHints(self)
        
#------------------------------------------------------------------------------

    def EvtcboClinicas(self,event):
        self.vClinicas=event.GetString()

#------------------------------------------------------------------------------

    def EvtCboUser(self,event):
        self.vUser=event.GetString()
#------------------------------------------------------------------------------

    def EvtcboTipConsulta(self,event):
        self.vTipConsulta = event.GetString()
#------------------------------------------------------------------------------

    def EvtcboConsult(self,event):
        self.vConsulto = event.GetString()
#------------------------------------------------------------------------------

    def Evtcboestado(self,event):
        self.vEstado = event.GetString()

#------------------------------------------------------------------------------

    def EvtcboBrokers(self,event):
        self.vBroker=event.GetString()
#------------------------------------------------------------------------------

    def CodAuto(self):
        name=self.vUser
        name=name.rsplit()
        i0=name[0][0]
        i1=name[1][0]
        Caracter=i0+i1
        
        sql="Select * from tblCodAuto"
        numero=self.odat.mQuery(sql)
        CodigoActual=int(numero[0][0])
        
        Longitud=7
        Patron = Caracter + "%0" + str(Longitud) + "d"

        sql2="Update tblCodAuto set Codigo=? Where Codigo=?"
        tp=str(CodigoActual+1)
        x=self.odat.Grabar(sql2,(tp,CodigoActual))

        if CodigoActual == "":
            newnumber= Patron % 1
        else:
            newnumber=Patron % (CodigoActual + 1)

        return newnumber
#------------------------------------------------------------------------------

    def SetHora(self):
        self.txtHoraLlegada.SetValue(time.strftime("%H:%M:%S", self.DiaHoy))

#------------------------------------------------------------------------------

    def OnbtnExcelButton(self,event):
        """Exporta a CSV"""
        
        path=self.oGlobal.APP_PATH
        
        if wx.Platform == '__WXGTK__':
            ff=path+'/export.csv'
        elif wx.Platform == '__WXMSW__':
            ff=path+'\export.csv'
        
        sql="Select * from tblMain order by Fecha"
        qy=self.odat.mQuery(sql)
        tit=[('Area','Usuario','Fecha','Tipo de llamante','Hora inicio', 'Hora fin','Lista de Brokers',
              'Lista de Clinicas','Empresa','Ramo','Tipo de Llamadas','Contacto','Asegurado',
              'Telefono','Estado','Observaciones','Se consulto','Con quien','Se transfirio',
              'Codigo de Autorizacion')]
        
        final=tit+qy
        
        try:
            wrt=UnicodeWriter(open(ff,"wb"))
            wrt.writerows(final)
            dlg=wx.MessageDialog(self,u'Se exportó con éxito los datos','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
        except:
            dlg=wx.MessageDialog(self,u'Error al Exportar datos','Auditoria Medica',wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()

#------------------------------------------------------------------------------
    def Validar(self):
        if len(self.cboTipLlamante.GetValue())==0:
            dlg=wx.MessageDialog(self,u'Se debe seleccionar un Tipo de LLamante','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.cboTipLlamante.SetFocus()
            return False
        elif len(self.cboRamo.GetValue())==0:
            dlg=wx.MessageDialog(self,u'Se debe seleccionar Ramo','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.cboRamo.SetFocus()
            return False
        elif len(self.cboestado.GetValue())==0:
            dlg=wx.MessageDialog(self,u'Se debe seleccionar un Estado','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.cboestado.SetFocus()
            return False
        elif len(self.cboConsult.GetValue())==0:
            dlg=wx.MessageDialog(self,u'Escoger: Consulta a otra Area','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.cboConsult.SetFocus()
            return False
        elif len(self.cboTipConsulta.GetValue())==0:
            dlg=wx.MessageDialog(self,u'Escoger: Tipo de Consulta','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.cboTipConsulta.SetFocus()
            return False
        elif self.HoraInicio==None:
            dlg=wx.MessageDialog(self,u'Debe seleccionar INICIO antes de ingresar datos.','Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
            dlg.ShowModal()
            dlg.Destroy()
            self.btnIni.SetFocus()
            return False
        
        else:
            return True
#------------------------------------------------------------------------------


    def OnBtnOkButton(self,event):
        
        x= self.Validar()
        if x==True:
            hrIni=time.strftime("%H:%M:%S",self.HoraInicio)
            hrFin=time.strftime("%H:%M:%S",time.localtime())
            fecha=time.strftime("%d-%m-%y", self.DiaHoy)
            
            emp=self.txtEmpresa.GetValue()
            if emp=='': emp='0'
            
            cont=self.txtContacto.GetValue()
            if cont=='': cont='0'
            
            ase=self.txtAsegurado.GetValue()
            if ase=='': ase='0'
            
            fono=self.txtTelefono.GetValue()
            if fono=='': fono='0'
            
            obs=self.txtObserv.GetValue()
            if obs=='': obs='0'
            
            qui=self.txtQuien.GetValue()
            if qui=='': qui='0'
            
            tran=self.txtTranfer.GetValue()
            if tran=='': tran='0'
            
            cod=self.txtCodAuto.GetValue()
            if cod=='': cod='0'
            
            consu=self.cboConsult.GetValue()
            if consu=='': consu='0'
            
            est=self.cboestado.GetValue()
            if est=='': est='0'
            
            cli=self.cboClinicas.GetValue()
            if cli=='': cli='0'
            
            brk=self.cboBrokers.GetValue()
            if brk=='': brk='0'
            
            tipconsu=self.cboTipConsulta.GetValue()
            if tipconsu=='': tipconsu='0'
            
            sql="Insert into tblMain (Area,Usuario,Fecha,TipoLlamante,HoraIni,HoraFin,ListaBrokers,ListaClinicas,Empresa,Ramo,TipoLlamada,Contacto,Asegurado,Telefono,Estado,Observaciones,Consulto,Quien,Transfirio,CodAuto) Values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
            tp=(self.txtArea.GetValue().encode('utf-8'),self.vUser.encode('utf-8'),fecha,self.vTipLlamante,hrIni,hrFin,brk,
                cli,emp,self.vRamo,tipconsu,cont,ase,cnt,fono,0,est,
                obs,consu,qui,tran,cod)
    
            if self.odat.Grabar(sql,tp)==True:
                dlg=wx.MessageDialog(self,u'Se grabó con éxito el Registro',u'Auditoria Medica',wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
            else:
                dlg=wx.MessageDialog(self,u'Error al grabar Registro',u'Auditoria Medica',wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
#------------------------------------------------------------------------------

    def OnbtnIniButton(self,event):
        
        self.txtAsegurado.Clear()
        self.txtContacto.Clear()
        self.txtObserv.SetValue('')
        self.cboConsult.SetValue('')
        self.txtTranfer.Clear()
        self.txtTelefono.Clear()
        self.cboBrokers.SetValue("")
        self.cboestado.SetValue("")
        self.cboRamo.SetValue("")
        self.cboTipConsulta.SetValue('')
        self.cboTipLlamante.SetValue('')
        self.cboClinicas.SetValue('')
        self.txtEmpresa.Clear()
        self.txtQuien.Clear()
        
        self.HoraInicio=time.localtime()
        
        self.SetHora()
        
        self.txtCodAuto.SetValue(self.CodAuto())
#------------------------------------------------------------------------------

    def EvtcboTipLlamante(self,event):
        self.vTipLlamante = event.GetString()
    
#------------------------------------------------------------------------------

    def EvtcboTipTrabajo(self,event):
        self.vTipTrabajo = event.GetString()
    
#------------------------------------------------------------------------------

    def EvtcboRamo(self,event):
        self.vRamo = event.GetString()

#------------------------------------------------------------------------------

    def CargarClinicas(self):
        sql="Select * from tblClinicas"
        rs=self.odat.mQuery(sql)
        
        for it in rs:
            self.cboClinicas.Append(it[0])
#------------------------------------------------------------------------------

    def CargarRamos(self):
        sql="Select * from tblRamo"
        rs=self.odat.mQuery(sql)
        
        for it in rs:
            self.cboRamo.Append(it[0])
#------------------------------------------------------------------------------

    def CargarUsers(self):
        sql="Select * from tblUsuario"
        rs=self.odat.mQuery(sql)
        self.ListaUsers=rs
        
        for it in rs:
            self.cboUser.Append(it[0])
#------------------------------------------------------------------------------

    def CargarTipConsulta(self):
        sql="Select * from tblTipConsulta"
        rs=self.odat.mQuery(sql)
        
        for it in rs:
            self.cboTipConsulta.Append(it[0])
#------------------------------------------------------------------------------

    def CargarTipLlamante(self):
        sql="Select * from tblTipLlamante"
        rs=self.odat.mQuery(sql)
        
        for it in rs:
            self.cboTipLlamante.Append(it[0])


#------------------------------------------------------------------------------

    def CargarBrokers(self):
        sql="Select * from tblBrokers"
        rs=self.odat.mQuery(sql)
        
        for it in rs:
            self.cboBrokers.Append(it[0])

class UnicodeWriter:
    """
    A CSV writer which will write rows to CSV file "f",
    which is encoded in the given encoding.
    """

    def __init__(self, f, dialect=csv.excel, encoding="cp1252", **kwds):
        # Redirect output to a queue
        self.queue = cStringIO.StringIO()
        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
        self.stream = f
        self.encoder = codecs.getincrementalencoder(encoding)()

    def writerow(self, row):
        self.writer.writerow([s.encode("cp1252") for s in row])
        # Fetch UTF-8 output from the queue ...
        data = self.queue.getvalue()
        data = data.decode("cp1252")
        # ... and reencode it into the target encoding
        data = self.encoder.encode(data)
        # write to the target stream
        self.stream.write(data)
        # empty queue
        self.queue.truncate(0)

    def writerows(self, rows):
        for row in rows:
            self.writerow(row)
#------------------------------------------------------------------------------

class Resumen(wx.Panel):
    
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        
        self.oGlobal=modGlobals()
        self.odat=database(self.oGlobal.DB_PATH)
        self.prnt=parent
        self.rs=self.ObtenerData()

        self.tit=['Area','Usuario','Fecha','Tipo de llamante','Hora inicio', 'Hora fin','Lista de Brokers',
              'Lista de Clinicas','Empresa','Ramo','Tipo de Llamadas','Contacto','Asegurado',
              'Telefono','Estado','Observaciones','Se consulto','Con quien','Se transfirio','Codigo de Autorizacion']
        self.CrearControles()


#------------------------------------------------------------------------------

    def CrearControles(self):
        self.oGrilla=GrillaExcel(self)
        self.oGrilla.CrearGrid(self.rs,self.tit)
#------------------------------------------------------------------------------
    def ObtenerData(self):
        sql="Select * from tblMain order by Fecha"
        rs=self.odat.mQuery(sql)
        
        return rs
#------------------------------------------------------------------------------
    
    def RefrescarData(self):
        self.rs=self.ObtenerData()
        self.oGrilla.Destroy()
        self.oGrilla=GrillaExcel(self)
        self.oGrilla.CrearGrid(self.rs,self.tit)

#------------------------------------------------------------------------------

class GrillaExcel(gridlib.Grid):

    def __init__(self,parent):
        
        gridlib.Grid.__init__(self, parent, -1,size=(860,580),pos=(10,10))

#------------------------------------------------------------------------------

    def CrearGrid(self,mdata,mcol):

        self.mColumnas=mcol
        self.mCa=len(mcol)
        self.mDatos=mdata
        self.mDat=len(mdata)
        
        self.CreateGrid(self.mDat,self.mCa)
        self._SetColumNames()
        self._SetData()
        self.AutoSizeColumns(True)

#------------------------------------------------------------------------------

    def RefreshData(self):
        self.ForceRefresh()
        
#------------------------------------------------------------------------------

    def _SetColumNames(self):
        i=0
        for col in self.mColumnas:
            self.SetColLabelValue(i, col)
            i+=1
            
#------------------------------------------------------------------------------

    def _SetData(self):
        x=0
        y=0
        
        for it in self.mDatos:
            for col in self.mColumnas:
                self.SetCellValue(y, x, it[x])
                x+=1
            y+=1
            x=0
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class mInfoGral(wx.Panel):
    
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        
        self.oGlobal=modGlobals()
        self.odat=database(self.oGlobal.DB_PATH)




#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class mNotebook(wx.Notebook):
    def __init__(self, parent, id):
        wx.Notebook.__init__(self, parent, id, pos=(10,10), size=(890,630), style=wx.BK_DEFAULT)
        self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
        
        if wx.Platform == '__WXGTK__':
            panel=wx.Panel(self)
        elif wx.Platform == '__WXMSW__':
            panel=wx.Panel(parent)
        
        oReg=Registro(self)
        self.oRes=Resumen(self)
        self.oInfo=mInfoGral(self)
        
        self.AddPage(oReg,"Macro")
        self.AddPage(self.oRes,"Resumen")
        #self.AddPage(self.oInfo,"Información General")
        

    def OnPageChanged(self, event):
        sel = self.GetSelection()
        
        if wx.Platform == '__WXGTK__':
            if sel==1:
                self.oRes.RefrescarData()
        elif wx.Platform == '__WXMSW__':
            if sel==0:
                self.oRes.RefrescarData()
        
        event.Skip()

#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class modGlobals:
    
    APP_PATH=None
    DB_PATH=None
    
    def serAppPath(self,ruta):
        self.__class__.APP_PATH=ruta
        return 
    
    def setDBPath(self,ruta):
        self.__class__.DB_PATH=ruta
        return 
    
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

class database:

    def __init__(self,dbpath):
        self.con = sqlite3.connect(dbpath,detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES,
                      isolation_level = None)

#------------------------------------------------------------------------------

    def mQuery(self,sql):
        cur=self.con.cursor()
        cur.execute(sql)
        rs=cur.fetchall()
        cur.close()
        return rs
#------------------------------------------------------------------------------

    def Grabar(self, qry,tp):
        cur=self.con.cursor()
        
        try:
            cur.execute(qry,tp)
            return True
        except:
            return False
        finally:
            cur.close()
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------

def main():
    application = RepTelef(0)
    application.MainLoop()

if __name__ == '__main__':
    main()
