# -*- coding: utf-8 -*-
"""
Created on Thu Jun 27 17:22:54 2019
PLANTILLA PyQt5
@author: nicolas.rincon
"""

import sys
import pandas as pd
import xlsxwriter
import datetime
import dateutil.relativedelta
import random
import locale
import math
from random import randint
import time
from datetime import datetime
from datetime import date
from dateutil.relativedelta import relativedelta
import numpy as np

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
import matplotlib.dates as mdates
from PyQt5.QtWidgets import QMessageBox

from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QTableWidget,QTableWidgetItem,QVBoxLayout, QPlainTextEdit, QLabel, QLineEdit, QApplication, QMessageBox, QScrollArea, QComboBox
from PyQt5.QtGui import QIcon, QPixmap, QImage, QPalette, QBrush, QPicture, QCursor
from PyQt5.QtCore import QSize, Qt
from PyQt5 import QtGui
import os 

#Clase para crear graficos        
class MatplotFigurebWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(MatplotFigurebWidget, self).__init__(parent)

        
        self.figure = Figure()
        self.canvas = FigureCanvasQTAgg(self.figure)

        self.axis = self.figure.add_subplot(111)

        self.layoutVertical = QtWidgets.QVBoxLayout(self)#QVBoxLayout
        self.layoutVertical.addWidget(self.canvas)


#Clase para crear tablas de visualizacion         
class TableManager(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(TableManager,self).__init__(parent)

        self.tableMaker = QTableWidget()
        self.tableMaker.setRowCount(10)
        self.tableMaker.setColumnCount(5)
        self.layoutVertical = QtWidgets.QVBoxLayout(self)
        self.layoutVertical.addWidget(self.tableMaker)
        self.tableMaker.setHorizontalHeaderLabels(["Col 1","Col 2","Col 3","Col 4","Col 5"])
        self.tableMaker.verticalHeader().hide()


        
#Clase para crear campos de formularios 
class LineEditManagerWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(LineEditManagerWidget,self).__init__(parent)
        
        self.layoutVertical = QtWidgets.QVBoxLayout(self)
        self.lineEdit = QLineEdit()
        
        self.layoutVertical.addWidget(self.lineEdit)

        
          
class Window_Visual(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Window_Visual, self).__init__(parent)
        self.resize(1366,768)

        
        STRM=("MUCHAS GRACIAS POR PARTICIPAR EN ESTE CURSO\n"
              "EN LA PONTIFICIA UNIVERSIDAD JAVERIANA\n\n"
              "ESTA PLANTILLA ES PARA USTEDES, LA PUEDEN\n"
              "EMPLEAR EN SUS PROYECTOS\n\n"
              "MUCHOS EXITOS Y LOS MEJORES DESEOS\n\n"
              "NICOLAS RINCON\n\n\n"
              "RECUERDA REINICIAR LA TERMINAL PARA\n"
              "VOLVER A EJECUTAR ESTE SCRIPT")
        self.label1 = QLabel(STRM, self)
        self.label1.resize(300,300)
        self.label1.move(125,25)
        self.label1.setStyleSheet("QLabel { background-color : white; color : black; font: 10p }")
        self.label1.show()
        
        self.LineText3=LineEditManagerWidget(self)
        self.LineText3.resize(100,50)
        self.LineText3.move(0,80)
        self.LineText3.show()
        
        self.tableManager1=TableManager(self)
        self.tableManager1.resize(570,300)
        self.tableManager1.move(500,25)
        
        self.tableManager1.tableMaker.setRowCount(10)
        for iTM in range (0,9):
            self.tableManager1.tableMaker.setItem(iTM,0, QTableWidgetItem(str('A')))
            self.tableManager1.tableMaker.setItem(iTM,1, QTableWidgetItem(str('B')))
            self.tableManager1.tableMaker.setItem(iTM,2, QTableWidgetItem(str(1)))
            self.tableManager1.tableMaker.setItem(iTM,3, QTableWidgetItem(str(2)))
            self.tableManager1.tableMaker.setItem(iTM,4, QTableWidgetItem(str(3)))
        
        self.pushButtonPlot2 = QtWidgets.QPushButton(self)
        self.pushButtonPlot2.setText(" ** OPRIMEME **")
        self.pushButtonPlot2.clicked.connect(self.on_pushButton2Plot_clicked)
        self.pushButtonPlot2.move(0,25)
        self.pushButtonPlot2.resize(100, 50) 
        
        #Codigo para insertar barras de desplzamiento
        self.scrollArea = QScrollArea();
        self.scrollArea.setWidget(self)
        self.scrollArea.setGeometry(20,20,1366,768)
        self.scrollArea.show()
        
        self.Figure1 = MatplotFigurebWidget(self)
        
        locale.setlocale(locale.LC_ALL, '')


    
    @QtCore.pyqtSlot()
    def on_pushButton2Plot_clicked(self):
        Fecha=datetime(2018,1,1,0)
        AFechas=[]
        AVentas=[]
        for i in range(12):
            AFechas.append(Fecha)
            AVentas.append(randint(20,41))
            Fecha=Fecha+relativedelta(months=1)
        self.Figure1.axis.clear()
        self.Figure1.move(0,400)
        self.Figure1.resize(900,250)
        self.Figure1.show()
        days = mdates.DayLocator()
        years = mdates.YearLocator()   # every year
        months = mdates.MonthLocator()  # every month
        Fmt = mdates.DateFormatter('%Y-%m')
        #Codigo para que solo aparescan dias, meses o años en el eje x   
        self.Figure1.axis.xaxis.set_major_locator(months)
        self.Figure1.axis.xaxis.set_major_formatter(Fmt)
        self.Figure1.axis.xaxis.set_minor_locator(months)
        
        #Codigo para que solo muestre la serie entre unas fechas especificas 
        #FechaMinimaEjeX=FechasAnalisis[len(FechasAnalisis)-1]
        #FechaMaximaEjeX=FechasAnalisis[0]
        #self.Figure1.axis.set_xlim(FechaMinimaEjeX, FechaMaximaEjeX)
        
        self.Figure1.axis.grid(True)
        self.Figure1.figure.autofmt_xdate()
        self.Figure1.axis.plot(AFechas,AVentas,color="blue",label='Ventas en el mes')
        self.legend = self.Figure1.axis.legend(loc='upper left', shadow=True)
        frame = self.legend.get_frame()
        frame.set_facecolor('0.90')
        self.Figure1.canvas.draw()
        self.Figure1.show()
        
        #Codigo para obtener el string del lineText3
        #IDProducto=str(self.LineText3.lineEdit.text())
        
       
        
if __name__ == "__main__":

    
    app = QtWidgets.QApplication(sys.argv)
    app.setApplicationName('PLANTILLA GUI BI-PYTHON PONTIFICIA UNIVERSIDAD JAVERIANA ')

    
    main= Window_Visual()
    main.show()
    
    sys.exit(app.exec_())
    