コード例 #1
0
class ListaTrabajos:
	def __init__(self):
		self.RT = RepositorioTrabajos()
		self.TrabajoL = self.RT.get_all()

	def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, descripcion):
		#Recibe los datos de un trabajo, crea un nuevo trabajo y lo agrega a la lista Trabajos.
		T = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None, descripcion,False)
		T.id_trabajo = self.RT.store(T)
		if T.id_trabajo == 0:
			print(T)
			return None
		else:
			self.TrabajoL.append(T)
			return T

	def BuscarPorID(self, id_trabajo):
		#Recibe un ID y retorna un trabajo.
		for T in self.TrabajoL:
			if T.id_trabajo == int(id_trabajo):
				return (T)
		print("El ID ingresado no coincide o pertenece con ningun trabajo asignado")
		return None

	def modificar_trabajo(self, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, id_trabajo):
		#Recibe un trabajo y modifica los datos.
		T = self.BuscarPorID(id_trabajo)
		if T:
			T.fecha_ingreso = fecha_ingreso
			T.fecha_entrega_propuesta = fecha_entrega_propuesta
			T.fecha_entrega_real = fecha_entrega_real
			T.descripcion = descripcion
			return self.RT.update(T)
		return None
コード例 #2
0
ファイル: listaTrabajos.py プロジェクト: belen2985/TPFinal
class ListaTrabajos:
    def __init__(self):
        self.rt = RepositorioTrabajos()
        self.lista = self.rt.get_all()

    def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                      fecha_entrega_real, descripcion, retirado):
        t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta,
                    fecha_entrega_real, descripcion, retirado)
        t.id_trabajo = self.rt.store(t)
        if t.id_trabajo == 0:
            return None
        else:
            self.lista.append(t)
            return t
コード例 #3
0
class Product:

    nombre_bd = 'base_datos.sqlite'

    def __init__(self, window):
        self.wind = window
        self.wind.title('Sistema de gestion de trabajos')
        self.rc = RepositorioClientes()
        self.lista_clientes = self.rc.get_all_particulares()
        self.rt = RepositorioTrabajos()

        #Frame
        frame = LabelFrame(self.wind, text='Menu principal')
        frame.grid(row=0, column=0, columnspan=8, pady=20)

        # Botonera
        ttk.Button(frame,
                   text="Agregar cliente particular",
                   command=self.add_clientspart_window).grid(row=1,
                                                             column=4,
                                                             columnspan=2,
                                                             sticky=W + E)
        ttk.Button(frame,
                   text="Agregar cliente corporativo",
                   command=self.add_clientscorp_window).grid(row=2,
                                                             column=4,
                                                             columnspan=2,
                                                             sticky=W + E)
        ttk.Button(frame,
                   text="Agregar un trabajo",
                   command=self.add_works_window).grid(row=3,
                                                       column=4,
                                                       columnspan=2,
                                                       sticky=W + E)

        # Mensajes de salida
        self.message = Label(text='', fg='red')
        self.message.grid(row=8, column=0, columnspan=2, sticky=W + E)

        # Tabla
        self.tree = ttk.Treeview(height=5, columns=("#1", "#2", "#3", '#4'))
        self.tree.grid(row=9, column=0, columnspan=6)

        self.tree.heading('#0', text='Nombre', anchor=CENTER)
        self.tree.heading('#1', text='Apellido', anchor=CENTER)
        self.tree.heading('#2', text='Teléfono', anchor=CENTER)
        self.tree.heading('#3', text='Mail', anchor=CENTER)
        self.tree.heading('#4', text='ID', anchor=CENTER)

        # Tabla clientes corporativos
        self.tree2 = ttk.Treeview(height=5,
                                  columns=("#1", "#2", "#3", "#4", '#5'))
        self.tree2.grid(row=11, column=0, columnspan=6)

        self.tree2.heading('#0', text='Nombre de la Empresa', anchor=CENTER)
        self.tree2.heading('#1', text='Nombre de Contacto', anchor=CENTER)
        self.tree2.heading('#2', text='Teléfono', anchor=CENTER)
        self.tree2.heading('#3', text='Teléfono de contacto', anchor=CENTER)
        self.tree2.heading('#4', text='Mail', anchor=CENTER)
        self.tree2.heading('#5', text='ID', anchor=CENTER)

        # Tabla trabajos
        self.tree3 = ttk.Treeview(height=5,
                                  columns=("#1", "#2", "#3", "#4", '#5', '#6'))
        self.tree3.grid(row=13, column=0, columnspan=6)

        self.tree3.heading('#0', text='ID de trabajo', anchor=CENTER)
        self.tree3.heading('#1', text='Nombre de cliente', anchor=CENTER)
        self.tree3.heading('#2', text='Fecha de Ingreso', anchor=CENTER)
        self.tree3.heading('#3',
                           text='Fecha de Entrega Propuesta',
                           anchor=CENTER)
        self.tree3.heading('#4', text='Fecha de Entrega Real', anchor=CENTER)
        self.tree3.heading('#5', text='Descripción', anchor=CENTER)
        self.tree3.heading('#6', text='Entregado', anchor=CENTER)

        # Botonera 2
        ttk.Button(text="Editar cliente particular",
                   command=self.edit_clients_part_window).grid(row=10,
                                                               column=1,
                                                               columnspan=2)
        ttk.Button(text="Eliminar cliente particular",
                   command=self.delete_clients_part).grid(row=10,
                                                          column=3,
                                                          columnspan=2)

        ttk.Button(text="Editar cliente corporativo",
                   command=self.edit_clients_corp_window).grid(row=12,
                                                               column=0,
                                                               columnspan=3)
        ttk.Button(text="Eliminar cliente corporativo",
                   command=self.delete_clients_corp).grid(row=12,
                                                          column=3,
                                                          columnspan=3)

        ttk.Button(text="Finalizar trabajo",
                   command=self.trabajo_finalizado).grid(row=14,
                                                         column=0,
                                                         columnspan=2)
        ttk.Button(text="Entregar el trabajo",
                   command=self.trabajo_entregado).grid(row=14,
                                                        column=1,
                                                        columnspan=2)
        ttk.Button(text="Modificar datos del trabajo",
                   command=self.edit_trabajos_window).grid(row=14,
                                                           column=2,
                                                           columnspan=2)
        ttk.Button(text="Cancelar trabajo",
                   command=self.eliminar_trabajo_confirmacion).grid(
                       row=14, column=3, columnspan=2)
        ttk.Button(text="Informe de trabajos pendientes",
                   command=self.informe).grid(row=14, column=4, columnspan=2)

        self.get_clients()
        self.get_works()

    def run_query(self, query, parameters=()):
        with sqlite3.connect(self.nombre_bd) as Conectar:
            cursor = Conectar.cursor()
            resultado = cursor.execute(query, parameters)
            Conectar.commit()
        return resultado

    def get_clients(self, lista=None):
        # Limpio la tabla antes de arrancar la query
        records = self.tree.get_children()
        records2 = self.tree2.get_children()
        for element in records:
            self.tree.delete(element)
        for element2 in records2:
            self.tree2.delete(element2)

        # Muestro clientes
        query = 'SELECT * FROM cliente JOIN cliente_particular ON cliente.id=cliente_particular.id_cliente ORDER BY id ASC'
        query1 = 'SELECT * FROM cliente JOIN cliente_corporativo ON cliente.id=cliente_corporativo.id_cliente ORDER BY id ASC'
        db_rows = self.run_query(query)
        db_rows1 = self.run_query(query1)
        #Particulares
        for row in db_rows:
            self.tree.insert('',
                             0,
                             text=(row[4]),
                             values=(row[5], row[1], row[2], row[3]))
        #Corporativos
        for fila in db_rows1:
            self.tree2.insert('',
                              0,
                              text=(fila[4]),
                              values=(fila[5], fila[1], fila[6], fila[2],
                                      fila[3]))

    def get_works(self, lista=None):
        # Limpio la tabla antes de arrancar la query
        registros = self.tree3.get_children()
        for element3 in registros:
            self.tree3.delete(element3)

        # Muestro los trabajos
        query = 'SELECT trabajos.id_cliente, trabajos.fecha_ingreso, trabajos.fecha_entrega_propuesta, cliente.id,\
             trabajos.fecha_entrega_real, trabajos.descripcion, trabajos.retirado, trabajos.id, \
                 cliente_corporativo.nombre_contacto \
                     FROM trabajos \
                         JOIN cliente ON trabajos.id_cliente = cliente.id \
                             JOIN cliente_corporativo ON cliente.id = cliente_corporativo.id_cliente'

        query2 = 'SELECT trabajos.id_cliente, trabajos.fecha_ingreso, trabajos.fecha_entrega_propuesta, cliente.id,\
             trabajos.fecha_entrega_real, trabajos.descripcion, trabajos.retirado, trabajos.id, \
                 cliente_particular.nombre,cliente_particular.apellido \
                     FROM trabajos \
                         JOIN cliente ON trabajos.id_cliente = cliente.id \
                             JOIN cliente_particular ON cliente.id = cliente_particular.id_cliente'

        filas_db = self.run_query(query)
        filas2_db = self.run_query(query2)
        for filas in filas_db:
            self.tree3.insert('',
                              0,
                              text=(filas[7]),
                              values=(filas[8], filas[1], filas[2], filas[4],
                                      filas[5], filas[6]))
        for filas2 in filas2_db:
            self.tree3.insert('',
                              0,
                              text=(filas2[7]),
                              values=(filas2[8] + ' ' + filas2[9], filas2[1],
                                      filas2[2], filas2[4], filas2[5],
                                      filas2[6]))

    def validations_particular(self):
        '''Valida que no haya espacios en blanco'''
        return len(self.name.get()) != 0 and len(
            self.surname.get()) != 0 and len(self.phone.get()) != 0 and len(
                self.mail.get()) != 0

    def validations_corporativo(self):
        '''Valida que no haya espacios en blanco'''
        return len(self.company_name.get()) != 0 and len(
            self.contact_name.get()) != 0 and len(
                self.contact_phone.get()) != 0 and len(
                    self.phone.get()) != 0 and len(self.mail.get()) != 0

    def add_clientspart_window(self):

        self.add_window_part = Toplevel()
        self.add_window_part.title = 'Agregar cliente'

        # Input Nombre
        Label(self.add_window_part, text='Nombre: ').grid(row=1, column=0)
        Entry(self.add_window_part,
              textvariable=StringVar(self.add_window_part),
              state='readonly')
        self.name = Entry(self.add_window_part)
        self.name.focus()
        self.name.grid(row=1, column=1)

        # Input Apellido
        Label(self.add_window_part, text='Apellido: ').grid(row=2, column=0)
        Entry(self.add_window_part)
        self.surname = Entry(self.add_window_part)
        self.surname.grid(row=2, column=1)

        # Input Telefono
        Label(self.add_window_part, text='Telefono: ').grid(row=3, column=0)
        Entry(self.add_window_part)
        self.phone = Entry(self.add_window_part)
        self.phone.grid(row=3, column=1)

        # Input Mail
        Label(self.add_window_part, text='Mail: ').grid(row=4, column=0)
        Entry(self.add_window_part)
        self.mail = Entry(self.add_window_part)
        self.mail.grid(row=4, column=1)

        # Botonera
        ttk.Button(self.add_window_part,
                   text="Guardar",
                   command=self.add_client_particular).grid(row=5,
                                                            columnspan=2,
                                                            sticky=W + E)

    def add_clientscorp_window(self):

        self.add_window_corp = Toplevel()
        self.add_window_corp.title = 'Agregar cliente corporativo'

        # Input Nombre Empresa
        Label(self.add_window_corp, text='Nombre Empresa: ').grid(row=1,
                                                                  column=0)
        Entry(self.add_window_corp,
              textvariable=StringVar(self.add_window_corp),
              state='readonly')
        self.company_name = Entry(self.add_window_corp)
        self.company_name.focus()
        self.company_name.grid(row=1, column=1)

        # Input Nombre Contacto
        Label(self.add_window_corp, text='Nombre Contacto: ').grid(row=2,
                                                                   column=0)
        Entry(self.add_window_corp)
        self.contact_name = Entry(self.add_window_corp)
        self.contact_name.grid(row=2, column=1)

        # Input Telefono
        Label(self.add_window_corp, text='Telefono: ').grid(row=3, column=0)
        Entry(self.add_window_corp)
        self.phone = Entry(self.add_window_corp)
        self.phone.grid(row=3, column=1)

        # Input Telefono de Contacto
        Label(self.add_window_corp,
              text='Telefono de contacto: ').grid(row=4, column=0)
        Entry(self.add_window_corp)
        self.contact_phone = Entry(self.add_window_corp)
        self.contact_phone.grid(row=4, column=1)

        # Input Mail
        Label(self.add_window_corp, text='Mail: ').grid(row=5, column=0)
        Entry(self.add_window_corp)
        self.mail = Entry(self.add_window_corp)
        self.mail.grid(row=5, column=1)

        # Botonera
        ttk.Button(self.add_window_corp,
                   text="Guardar",
                   command=self.add_client_corporativo).grid(row=6,
                                                             columnspan=2,
                                                             sticky=W + E)

    def add_client_particular(self):
        #si las validaciones son correctas
        if self.validations_particular():
            parameters = ClienteParticular(self.name.get(), self.surname.get(),
                                           self.phone.get(), self.mail.get())
            parameters.id_cliente = self.rc.store(parameters)
            self.lista_clientes.append(parameters)
            self.message[
                'text'] = 'El cliente personal {0} {1} ha sido añadido correctamente'.format(
                    self.name.get(), self.surname.get())
            self.name.delete(0, END)
            self.surname.delete(0, END)
            self.phone.delete(0, END)
            self.mail.delete(0, END)
            self.get_clients()
            return parameters
        else:
            self.message[
                'text'] = 'Nombre, Apellido, Teléfono y Mail son requeridos'

    def add_client_corporativo(self):
        #si las validaciones son correctas
        if self.validations_corporativo():
            parameters = ClienteCorporativo(self.company_name.get(),
                                            self.contact_name.get(),
                                            self.contact_phone.get(),
                                            self.phone.get(), self.mail.get())
            parameters.id_cliente = self.rc.store(parameters)
            self.lista_clientes.append(parameters)
            self.message[
                'text'] = 'El cliente corporativo {0} de la empresa {1} ha sido añadido correctamente'.format(
                    self.contact_name.get(), self.company_name.get())
            self.company_name.delete(0, END)
            self.contact_name.delete(0, END)
            self.contact_phone.delete(0, END)
            self.phone.delete(0, END)
            self.mail.delete(0, END)
            self.get_clients()
            return parameters
        else:
            self.message[
                'text'] = 'Nombre, Apellido, Teléfono y Mail son requeridos'

    def edit_clients_part_window(self):
        '''Ventana para editar un cliente particular'''
        self.message['text'] = ''
        try:
            self.tree.item(self.tree.selection())['text'][0]
        except IndexError:
            self.message['text'] = 'Por favor, seleccione un registro'
            return
        old_name = self.tree.item(self.tree.selection())['text']
        old_surname = self.tree.item(self.tree.selection())['values'][0]
        old_phone = self.tree.item(self.tree.selection())['values'][1]
        old_mail = self.tree.item(self.tree.selection())['values'][2]
        id_cliente1 = self.tree.item(self.tree.selection())['values'][3]
        self.edit_window = Toplevel()
        self.edit_window.title = 'Editar cliente'

        # ID
        Label(self.edit_window, text='ID: ').grid(row=1, column=1)
        Entry(self.edit_window,
              textvariable=StringVar(self.edit_window, value=id_cliente1),
              state='readonly').grid(row=1, column=2)

        # Nombre Anterior
        Label(self.edit_window, text='Nombre anterior: ').grid(row=2, column=1)
        Entry(self.edit_window,
              textvariable=StringVar(self.edit_window, value=old_name),
              state='readonly').grid(row=2, column=2)

        # Nombre Actual
        Label(self.edit_window, text='Nombre actual: ').grid(row=3, column=1)
        new_name = Entry(self.edit_window)
        new_name.grid(row=3, column=2)

        # Apellido Anterior
        Label(self.edit_window, text='Apellido Anterior: ').grid(row=4,
                                                                 column=1)
        Entry(self.edit_window,
              textvariable=StringVar(self.edit_window, value=old_surname),
              state='readonly').grid(row=4, column=2)

        # Nuevo Apellido
        Label(self.edit_window, text='Apellido Actual: ').grid(row=5, column=1)
        new_surname = Entry(self.edit_window)
        new_surname.grid(row=5, column=2)

        # Telefono Anterior
        Label(self.edit_window, text='Telefono Anterior: ').grid(row=6,
                                                                 column=1)
        Entry(self.edit_window,
              textvariable=StringVar(self.edit_window, value=old_phone),
              state='readonly').grid(row=6, column=2)

        # Nuevo Telefono
        Label(self.edit_window, text='Telefono Actual: ').grid(row=7, column=1)
        new_phone = Entry(self.edit_window)
        new_phone.grid(row=7, column=2)

        # Mail anterior
        Label(self.edit_window, text='Mail Anterior: ').grid(row=8, column=1)
        Entry(self.edit_window,
              textvariable=StringVar(self.edit_window, value=old_mail),
              state='readonly').grid(row=8, column=2)

        # Nuevo mail
        Label(self.edit_window, text='Mail Actual: ').grid(row=9, column=1)
        new_mail = Entry(self.edit_window)
        new_mail.grid(row=9, column=2)

        # Botón de guardar cambios
        ttk.Button(self.edit_window,
                   text='Actualizar',
                   command=lambda: self.edit_clients_part(
                       new_name.get(), new_surname.get(), new_phone.get(),
                       new_mail.get(), id_cliente1)).grid(row=10,
                                                          columnspan=3,
                                                          sticky=W + E)

    def edit_clients_part(self, new_name, new_surname, new_phone, new_mail,
                          id_cliente):
        '''Editar un cliente particular'''
        parameters = ClienteParticular(new_name, new_surname, new_phone,
                                       new_mail, id_cliente)
        self.rc.update(parameters)
        self.edit_window.destroy()
        self.message[
            'text'] = 'El cliente {0} {1} sido editado correctamente'.format(
                new_name, new_surname)
        self.get_clients()

    def edit_clients_corp_window(self):
        '''Ventana para editar un cliente corporativo'''
        self.message['text'] = ''
        try:
            self.tree2.item(self.tree2.selection())['text'][0]
        except IndexError:
            self.message['text'] = 'Por favor, seleccione un registro'
            return
        old_company_name = self.tree2.item(self.tree2.selection())['text']
        old_contact_name = self.tree2.item(self.tree2.selection())['values'][0]
        old_contact_phone = self.tree2.item(
            self.tree2.selection())['values'][1]
        old_phone = self.tree2.item(self.tree2.selection())['values'][2]
        old_mail = self.tree2.item(self.tree2.selection())['values'][3]
        id_cliente = self.tree2.item(self.tree2.selection())['values'][4]
        self.edit_window2 = Toplevel()
        self.edit_window2.title = 'Editar cliente'

        # ID
        Label(self.edit_window2, text='ID: ').grid(row=0, column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2, value=id_cliente),
              state='readonly').grid(row=0, column=2)

        # Nombre de la empresa Anterior
        Label(self.edit_window2,
              text='Nombre de la empresa anterior: ').grid(row=1, column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2,
                                     value=old_company_name),
              state='readonly').grid(row=1, column=2)

        # Nombre de la empresa Actual
        Label(self.edit_window2,
              text='Nombre de la empresa actual: ').grid(row=2, column=1)
        new_company_name = Entry(self.edit_window2)
        new_company_name.grid(row=2, column=2)

        # Nombre de contacto Anterior
        Label(self.edit_window2,
              text='Nombre de contacto anterior: ').grid(row=3, column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2,
                                     value=old_contact_name),
              state='readonly').grid(row=3, column=2)

        # Nombre de contacto Actual
        Label(self.edit_window2,
              text='Nombre de contacto actual: ').grid(row=4, column=1)
        new_contact_name = Entry(self.edit_window2)
        new_contact_name.grid(row=4, column=2)

        # Telefono Anterior
        Label(self.edit_window2, text='Telefono Anterior: ').grid(row=5,
                                                                  column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2, value=old_phone),
              state='readonly').grid(row=5, column=2)

        # Nuevo Telefono
        Label(self.edit_window2, text='Telefono Actual: ').grid(row=6,
                                                                column=1)
        new_phone = Entry(self.edit_window2)
        new_phone.grid(row=6, column=2)

        # Telefono de contacto Anterior
        Label(self.edit_window2,
              text='Telefono de contacto anterior: ').grid(row=7, column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2,
                                     value=old_contact_phone),
              state='readonly').grid(row=7, column=2)

        # Telefono de contacto actual
        Label(self.edit_window2,
              text='Telefono de contacto actual: ').grid(row=8, column=1)
        new_contact_phone = Entry(self.edit_window2)
        new_contact_phone.grid(row=8, column=2)

        # Mail Anterior
        Label(self.edit_window2, text='Mail anterior: ').grid(row=9, column=1)
        Entry(self.edit_window2,
              textvariable=StringVar(self.edit_window2, value=old_mail),
              state='readonly').grid(row=9, column=2)

        # Mail actual
        Label(self.edit_window2, text='Mail actual: ').grid(row=10, column=1)
        new_mail = Entry(self.edit_window2)
        new_mail.grid(row=10, column=2)

        # Botón de guardar cambios
        ttk.Button(
            self.edit_window2,
            text='Actualizar',
            command=lambda: self.edit_clients_corp(new_company_name.get(
            ), new_contact_name.get(), new_contact_phone.get(), new_phone.get(
            ), new_mail.get(), id_cliente)).grid(row=11,
                                                 columnspan=3,
                                                 sticky=W + E)

    def edit_clients_corp(self, new_company_name, new_contact_name,
                          new_contact_phone, new_phone, new_mail, id_cliente):
        '''Editar un cliente corporativo'''
        parameters = ClienteCorporativo(new_company_name, new_contact_name,
                                        new_contact_phone, new_phone, new_mail,
                                        id_cliente)
        self.rc.update(parameters)
        self.edit_window2.destroy()
        self.message[
            'text'] = 'El cliente {0} de la empresa {1} ha sido editado correctamente'.format(
                new_contact_name, new_company_name)
        self.get_clients()

    def delete_clients_part(self):
        '''Eliminar a un cliente particular'''
        name = self.tree.item(self.tree.selection())['text']
        surname = self.tree.item(self.tree.selection())['values'][0]
        phone = self.tree.item(self.tree.selection())['values'][1]
        mail = self.tree.item(self.tree.selection())['values'][2]
        id_cliente1 = self.tree.item(self.tree.selection())['values'][3]
        try:
            self.tree.item(self.tree.selection())['text']
        except IndexError:
            self.message['text'] = 'Seleccione a un cliente'
        name = self.tree.item(self.tree.selection())['text']
        parameters = ClienteParticular(name, surname, phone, mail, id_cliente1)
        self.rc.delete(parameters)
        self.message[
            'text'] = 'El cliente {0} {1} sido editado correctamente'.format(
                name, surname)
        self.get_clients()

    def delete_clients_corp(self):
        '''Eliminar a un cliente corporativo'''
        company_name = self.tree2.item(self.tree2.selection())['text']
        contact_name = self.tree2.item(self.tree2.selection())['values'][0]
        contact_phone = self.tree2.item(self.tree2.selection())['values'][1]
        phone = self.tree2.item(self.tree2.selection())['values'][2]
        mail = self.tree2.item(self.tree2.selection())['values'][3]
        id_cliente1 = self.tree2.item(self.tree2.selection())['values'][4]
        try:
            self.tree.item(self.tree2.selection())['text']
        except IndexError:
            self.message['text'] = 'Seleccione a un cliente'
        parameters = ClienteCorporativo(company_name, contact_name,
                                        contact_phone, phone, mail,
                                        id_cliente1)
        self.rc.delete(parameters)
        self.message[
            'text'] = 'El cliente {0} de la empresa {1} sido eliminado correctamente'.format(
                contact_name, company_name)
        self.get_clients()

    def add_works_window(self):

        self.add_window_work = Toplevel()
        self.add_window_work.title = 'Agregar trabajo'

        # Input ID

        Label(self.add_window_work, text='ID del cliente: ').grid(row=1,
                                                                  column=0)
        self.id_cliente_entry = Entry(self.add_window_work)
        self.id_cliente_entry.focus()
        self.id_cliente_entry.grid(row=1, column=1)

        # Input Fecha de Ingreso
        Label(self.add_window_work, text='Fecha de Ingreso: ').grid(row=2,
                                                                    column=0)
        self.entry_date = Entry(self.add_window_work)
        self.entry_date.grid(row=2, column=1)

        # Input Fecha de Entrega Propuesta
        Label(self.add_window_work,
              text='Fecha de Entrega Propuesta: ').grid(row=3, column=0)
        self.proposal_delivery_date = Entry(self.add_window_work)
        self.proposal_delivery_date.grid(row=3, column=1)

        # Input Descripcion
        Label(self.add_window_work, text='Descripcion: ').grid(row=5, column=0)
        self.description = Entry(self.add_window_work)
        self.description.grid(row=5, column=1)

        # Botonera
        ttk.Button(self.add_window_work, text="Guardar",
                   command=self.add_work).grid(row=7,
                                               columnspan=2,
                                               sticky=W + E)

    def validations_work(self):
        #'''Valida que no haya espacios en blanco'''
        return len(self.id_cliente_entry.get())

    def add_work(self):
        #si las validaciones son correctass
        if self.validations_work():
            self.message['text'] = ''
            obj_cliente = None
            obj_cliente = self.rc.get_one(self.id_cliente_entry.get())
            fe_entrada = datetime.strptime(self.entry_date.get(), '%d-%m-%Y')
            fe_entrada.strftime('%Y-%m-%d')
            fecha_ent_pro = ''

            # En caso de que la fecha propuesta esté en blanco, asignar None
            if fecha_ent_pro != '':
                fecha_ent_pro = datetime.strptime(
                    self.proposal_delivery_date.get(), '%d-%m-%Y')
                fecha_ent_pro.strftime('%Y-%m-%d')
            else:
                fecha_ent_pro = None

            parameters = Trabajo(obj_cliente, fe_entrada, fecha_ent_pro, None,
                                 self.description.get(), False, None)
            a = self.rt.store(parameters)
            print(parameters, a)
            if a:
                self.message[
                    'text'] = 'El trabajo del cliente {0} ha sido añadido correctamente'.format(
                        self.id_cliente_entry.get())
                self.get_works()
                self.id_cliente_entry.delete(0, END)
                self.entry_date.delete(0, END)
                self.proposal_delivery_date.delete(0, END)
                self.description.delete(0, END)
            else:
                self.message[
                    'text'] = 'El trabajo del cliente no se ha sido añadido. Código de error: 0'
                print(fecha_ent_pro)

        else:
            self.message['text'] = 'Todos los campos son requeridos'

    def retirado(self):
        '''Se cambia su estado de retirado a True'''
        try:
            self.tree3.item(self.tree3.selection())['text']
        except IndexError:
            self.message['text'] = 'Seleccione un trabajo'

        self.message['text'] = 'El trabajo ha sido entregado correctamente'
        self.get_works()

    def edit_trabajos_window(self):
        '''Ventana para editar un trabajo'''
        self.message['text'] = ''
        try:
            self.tree3.item(self.tree3.selection())['values'][0]
        except IndexError:
            self.message['text'] = 'Por favor, seleccione un registro'
            return
        old_description = self.tree3.item(self.tree3.selection())['values'][4]
        old_entry_date = self.tree3.item(self.tree3.selection())['values'][1]
        id_cliente = self.tree3.item(self.tree3.selection())['values'][0]
        proposal_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][2]
        real_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][3]

        if real_delivery_date == None:
            real_delivery_date = '01-01-1981'
        else:
            real_delivery_date = real_delivery_date

        withdrawn = self.tree3.item(self.tree3.selection())['values'][5]
        id_trabajo = self.tree3.item(self.tree3.selection())['text']
        self.edit_work_window = Toplevel()
        self.edit_work_window.title = 'Editar trabajo'

        # ID
        Label(self.edit_work_window, text='ID: ').grid(row=1, column=1)
        Entry(self.edit_work_window,
              textvariable=StringVar(self.edit_work_window, value=id_trabajo),
              state='readonly').grid(row=1, column=2)

        # Descripcion Anterior
        Label(self.edit_work_window,
              text='Descripcion anterior: ').grid(row=2, column=1)
        Entry(self.edit_work_window,
              textvariable=StringVar(self.edit_work_window,
                                     value=old_description),
              state='readonly').grid(row=2, column=2)

        # Descripcion Actual
        Label(self.edit_work_window,
              text='Descripcion actual: ').grid(row=3, column=1)
        new_description = Entry(self.edit_work_window)
        new_description.grid(row=3, column=2)

        # Fecha propuesta anterior
        Label(self.edit_work_window,
              text='Fecha propuesta anterior: ').grid(row=4, column=1)
        Entry(self.edit_work_window,
              textvariable=StringVar(self.edit_work_window,
                                     value=proposal_delivery_date),
              state='readonly').grid(row=4, column=2)

        # Fecha propuesta actual
        Label(self.edit_work_window,
              text='Fecha propuesta actual: ').grid(row=5, column=1)
        new_proposal_date = Entry(self.edit_work_window)
        new_proposal_date.grid(row=5, column=2)

        # Fecha de Ingreso Anterior
        Label(self.edit_work_window,
              text='Fecha de ingreso anterior: ').grid(row=6, column=1)
        Entry(self.edit_work_window,
              textvariable=StringVar(self.edit_work_window,
                                     value=old_entry_date),
              state='readonly').grid(row=6, column=2)

        # Fecha de Ingreso Actual
        Label(self.edit_work_window,
              text='Fecha de ingreso actual: ').grid(row=7, column=1)
        new_entry_date = Entry(self.edit_work_window)
        new_entry_date.grid(row=7, column=2)

        # Botón de guardar cambios
        ttk.Button(self.edit_work_window,
                   text='Actualizar',
                   command=lambda: self.edit_works_desc(
                       id_cliente, new_entry_date.get(), new_proposal_date.get(
                       ), real_delivery_date, new_description.get(), withdrawn,
                       id_trabajo)).grid(row=8, columnspan=3, sticky=W + E)

    def edit_works_desc(self, id_cliente, new_entry_date, new_proposal_date,
                        real_delivery_date, new_description, withdrawn,
                        id_trabajo):
        '''Editar descripcion y fecha de ingreso'''
        nueva_fecha = datetime.strptime(new_entry_date, '%d-%m-%Y')
        nueva_fecha.strftime('%Y-%m-%d')
        fecha_ent_pro = datetime.strptime(new_proposal_date, '%d-%m-%Y')
        fecha_ent_pro.strftime('%Y-%m-%d')

        if real_delivery_date == 'None':
            real_delivery_date = '01-01-1981'
            fecha_ent_re = datetime.strptime(real_delivery_date, '%Y-%m-%d')
            fecha_ent_re.strftime('%Y-%m-%d')
        else:
            fecha_ent_re = datetime.strptime(real_delivery_date, '%Y-%m-%d')
            fecha_ent_re.strftime('%Y-%m-%d')

        parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro,
                             fecha_ent_re, new_description, withdrawn,
                             id_trabajo)

        a = self.rt.update(parameters)
        if a:
            self.edit_work_window.destroy()
            self.message['text'] = 'El trabajo sido editado correctamente'
        else:
            self.message['text'] = 'El trabajo no ha sido editado'
        self.get_works()

    def trabajo_finalizado(self):
        '''Cambiar el estado a finalizado, modificando su fecha de entrega real a hoy'''
        try:
            self.tree3.item(self.tree3.selection())['values'][0]
        except IndexError:
            self.message['text'] = 'Por favor, seleccione un registro'
            return
        # Obtengo la fecha de hoy
        hoy = date.today()
        hoy.strftime('%d, %m, %Y')

        # Obtengo los datos actuales del objeto en cuestión
        description = self.tree3.item(self.tree3.selection())['values'][4]
        entry_date = self.tree3.item(self.tree3.selection())['values'][1]
        id_cliente = self.tree3.item(self.tree3.selection())['values'][0]
        proposal_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][2]
        #old_real_delivery_date = self.tree3.item(self.tree3.selection())['values'][3]
        withdrawn = self.tree3.item(self.tree3.selection())['values'][5]
        id_trabajo = self.tree3.item(self.tree3.selection())['text']

        # Formateo las fechas
        nueva_fecha = datetime.strptime(entry_date, '%Y-%m-%d')
        nueva_fecha.strftime('%Y-%m-%d')

        if proposal_delivery_date == 'None':
            proposal_delivery_date = '2000-01-01'
        else:
            proposal_delivery_date = proposal_delivery_date

        fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d')
        fecha_ent_pro.strftime('%Y-%m-%d')
        fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d')
        fecha_ent_pro.strftime('%Y-%m-%d')

        # Paso parametros al obj Trabajo
        parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro, hoy,
                             description, withdrawn, id_trabajo)

        a = self.rt.update(parameters)
        if a:
            self.message['text'] = 'El trabajo sido editado correctamente'
        else:
            self.message['text'] = 'El trabajo no ha sido editado'
        self.get_works()

    def trabajo_entregado(self):
        '''Cambiar el estado a entregado'''
        try:
            self.tree3.item(self.tree3.selection())['values'][0]
        except IndexError:
            self.message['text'] = 'Por favor, seleccione un registro'
            return

        # Obtengo los datos actuales del objeto en cuestión
        description = self.tree3.item(self.tree3.selection())['values'][4]
        entry_date = self.tree3.item(self.tree3.selection())['values'][1]
        id_cliente = self.tree3.item(self.tree3.selection())['values'][0]
        proposal_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][2]
        real_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][3]
        #withdrawn = self.tree3.item(self.tree3.selection())['values'][5]
        id_trabajo = self.tree3.item(self.tree3.selection())['text']

        # Formateo las fechas
        nueva_fecha = datetime.strptime(entry_date, '%Y-%m-%d')
        nueva_fecha.strftime('%Y-%m-%d')
        fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d')
        fecha_ent_pro.strftime('%Y-%m-%d')
        fecha_ent_real = datetime.strptime(real_delivery_date, '%Y-%m-%d')
        fecha_ent_real.strftime('%Y-%m-%d')

        withdrawn = True

        # Paso parametros al obj Trabajo
        parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro,
                             fecha_ent_real, description, withdrawn,
                             id_trabajo)

        a = self.rt.update(parameters)
        if a:
            self.message[
                'text'] = 'El trabajo {0} sido entregado correctamente'.format(
                    id_trabajo)
        else:
            self.message['text'] = 'El trabajo no ha sido editado'
        self.get_works()

    def eliminar_trabajo_confirmacion(self):
        '''ventana para confirmar la eliminación de los trabajos'''
        # Creo ventana
        self.delete_work_window = Toplevel()
        self.delete_work_window.title = 'Eliminar trabajo'

        # Label
        label = Label(self.delete_work_window,
                      text='¿Está seguro que desea eliminar el trabajo?')
        label.grid(row=1, column=0)

        # Botón de Confirmar
        ttk.Button(self.delete_work_window,
                   text='Sí, eliminar',
                   command=lambda: self.eliminar_trabajo()).grid(row=2,
                                                                 column=0)
        # Botón Cancelar
        ttk.Button(self.delete_work_window,
                   text='NO, cancelar',
                   command=lambda: self.delete_work_window.destroy()).grid(
                       row=3, column=0)

    def eliminar_trabajo(self):
        '''Eliminar un trabajo de la BD'''

        # Obtengo los datos actuales del objeto en cuestión
        description = self.tree3.item(self.tree3.selection())['values'][4]
        entry_date = self.tree3.item(self.tree3.selection())['values'][1]
        id_cliente = self.tree3.item(self.tree3.selection())['values'][0]
        proposal_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][2]
        real_delivery_date = self.tree3.item(
            self.tree3.selection())['values'][3]
        withdrawn = self.tree3.item(self.tree3.selection())['values'][5]
        id_trabajo = self.tree3.item(self.tree3.selection())['text']

        # Paso parametros al obj Trabajo
        parameters = Trabajo(id_cliente, entry_date, proposal_delivery_date,
                             real_delivery_date, description, withdrawn,
                             id_trabajo)
        a = self.rt.delete(parameters)

        # Códigos de éxito o error y retorno la lista de trabajos actualizados
        if a:
            self.message[
                'text'] = 'El trabajo {0} sido eliminado correctamente'.format(
                    id_trabajo)
        else:
            self.message['text'] = 'El trabajo no ha sido eliminado'
        self.get_works()

    def informe(self):

        # Creo ventana
        self.informe_trabajos_window = Toplevel()
        self.informe_trabajos_window.title = 'Informe'

        # Obtengo la fecha de hoy
        hoy = date.today()
        hoyhoy = hoy.strftime('%Y-%m-%d')

        # Traigo todos los parámetros para comparar la fecha y la entrega
        trabajos_deben = []
        clientes_deben = []
        trabajos_no_deben = []
        clientes_no_deben = []
        fecha_propuesta = []

        trabajos_realmente_deben = []

        for Parent in self.tree3.get_children():
            entregado = self.tree3.item(Parent)["values"][5]
            id_cliente = self.tree3.item(Parent)['text']
            fecha_entrega_propuesta = self.tree3.item(Parent)['values'][3]
            if entregado == 0:
                trabajos_deben.append(entregado)
                clientes_deben.append(id_cliente)
                fecha_propuesta.append(fecha_entrega_propuesta)
            else:
                trabajos_no_deben.append(entregado)
                clientes_no_deben.append(id_cliente)

        #print (fecha_propuesta)
        cant_trabajos = len(trabajos_deben)

        for i in fecha_propuesta:
            if i <= hoyhoy:
                trabajos_realmente_deben.append(i)

        print("Al dia de hoy", hoyhoy, "faltan entregar", cant_trabajos,
              "trabajos")
        # Label
        label = Label(self.informe_trabajos_window, text='Informes')
        label.grid(row=1, column=0)

        label2 = Label(self.informe_trabajos_window,
                       text="El informe sale por consola")
        label2.grid(row=1, column=0)

        # Botón Cierre
        ttk.Button(
            self.informe_trabajos_window,
            text='Cerrar',
            command=lambda: self.informe_trabajos_window.destroy()).grid(
                row=2, column=0)
コード例 #4
0
ファイル: listaTrabajo.py プロジェクト: brunoballi/TPFinal
class ListaTrabajos:
    def __init__(self):
        self.rt = RepositorioTrabajos()
        self.listaTrabajo = self.rt.get_all()

    def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                      descripcion):
        "Recibe los datos de una trabajo, crea uno nuevo y lo agrega a la lista"
        t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None,
                    descripcion, False)
        t.id_trabajo = self.rt.store(t)
        if t.id_trabajo == 0:
            return None
        else:
            self.listaTrabajo.append(t)
            return t

    def _buscar_por_id(self, id_trabajo):
        """Recibe un id de trabajo y retorna el cliente que coincide con esa
        id, o None si ninguno de ellos coincide"""

        for t in self.listaTrabajo:
            if t.id_trabajo == int(id_trabajo):
                return (t)
        return None

    def modificar_datos_trabajo(self, fecha_ingreso, fecha_entrega_propuesta,
                                descripcion, id_trabajo):
        """Recibe un trabajo y modifica sus datos"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            t.fecha_ingreso = fecha_ingreso
            t.fecha_entrega_propuesta = fecha_entrega_propuesta
            t.descripcion = descripcion
            return self.rt.update(t)
        return None

    def trabajo_finalizado(self, id_trabajo):
        """Recibe un trabajo y le modifica la fecha de entrega"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            t.fecha_entrega_real = datetime.date.today()
            return self.rt.update(t)
        return None

    def retiro_trabajo(self, id_trabajo):
        """Recibe un trabajo y modifica el trabajo como retirado"""
        t = self._buscar_por_id(id_trabajo)
        if t:
            if t.fecha_entrega_real == None:
                t.retirado = True
                self.trabajo_finalizado(id_trabajo)
            else:
                t.retirado = True
            return self.rt.update(t)
        return None

    def eliminar_trabajo(self, id_trabajo):
        t = self._buscar_por_id(id_trabajo)
        if t:
            self.rt.delete(t)
            self.listaTrabajo = self.rt.get_all()
            return True
        return None
コード例 #5
0
class ListaTrabajos:
    def __init__(self):
        self.RT = RepositorioTrabajos()
        self.TrabajoL = self.RT.get_all()

    def NuevoTrabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta,
                     descripcion):
        """Recibe los datos de un trabajo, crea un nuevo trabajo y lo agrega a la lista trabajos"""
        T = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None,
                    descripcion, False)
        T.id_trabajo = self.RT.store(T)
        if T.id_trabajo == 0:
            return None
        else:
            self.TrabajoL.append(T)
            return T

    def BuscarPorID(self, id_trabajo):
        """Recibe un ID y retorna un trabajo"""
        for T in self.TrabajoL:
            if T.id_trabajo == int(id_trabajo):
                return (T)
        return None

    def TrabajoFinalizado(self, id_trabajo):
        """Recibe un trabajo y le modifica la fecha de entrega"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            T.fecha_entrega_real = datetime.date.today()
            return self.RT.update(T)
        return None

    def Trabajo_retirado(self, id_trabajo):
        """Recibe un trabajo y modifica el trabajo como retirado"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            if T.fecha_entrega_real == None:
                T.retirado = True
                self.TrabajoFinalizado(id_trabajo)
            else:
                T.retirado = True
            return self.RT.update(T)
        return None

    def ModificarDatosT(self, fecha_ingreso, fecha_entrega_propuesta,
                        descripcion, id_trabajo):
        """Recibe un trabajo y modifica sus datos"""
        T = self.BuscarPorID(id_trabajo)
        if T:
            T.fecha_ingreso = fecha_ingreso
            T.fecha_entrega_propuesta = fecha_entrega_propuesta
            T.descripcion = descripcion
            return self.RT.update(T)
        return None

    def EliminarTrabajo(self, id_trabajo):
        T = self.BuscarPorID(id_trabajo)
        if T:
            self.RT.delete(T)
            self.TrabajoL = self.RT.get_all()
            return True
        return None
コード例 #6
0
class Menu:
    def __init__(self):
        self.rc = RepositorioClientes()
        self.rt = RepositorioTrabajos()
        self.lista_trabajo = Lista_Trabajo()
        self.lista_clientes = ListaClientes()
        self.opciones = {
            "1": self.mostrar_clientes,
            "2": self.nuevo_cliente,
            "3": self.modificar_particular,
            "4": self.modificar_corporativo,
            "5": self.borrar_cliente,
            "6": self.mostrar_trabajos,
            "7": self.nuevo_trabajo,
            "8": self.trabajo_finalizado,
            "9": self.trabajo_retirado,
            "10": self.modificar_trabajo,
            "11": self.mostrar_no_retirados,
            "12": self.eliminar_trabajo,
            "0": self.salir
        }

    def mostrar_menu(self):
        print("""
_________________________________________________
|Menu del sistema:                               |
|1. Mostrar todos los clientes                   |
|2. Agregar Nuevo Cliente                        |
|3. Modificar Cliente PARTICULAR                 |
|4. Modificar Cliente CORPORATIVO                |
|5. Borrar cliente                               |
|6. Mostrar Trabajos                             |
|7. Nuevo Trabajo                                |
|8. Finalizar Trabajo                            |
|9. Marcar trabajo como retirado                 |
|10. Modificar Trabajo                           |
|11. Mostrar trabajos finalizados no retirados   |
|12. Eliminar Trabajo                            |
|0. Salir                                        |
|________________________________________________|
""")

    def ejecutar(self):
        '''Mostrar el menu y responder las opciones'''
        while True:
            self.mostrar_menu()
            opcion = input("Ingrese una opcion: ")
            accion = self.opciones.get(opcion)
            if accion:
                accion()
            else:
                print("{0} no es una opcion valida".format(opcion))

    def mostrar_clientes(self, lista=None):
        if lista == None:
            lista = self.lista_clientes.lista
        print("Clientes: ")
        for cliente in lista:
            print("===========================================")
            print(cliente)
            print("===========================================")

    def nuevo_cliente(self):
        tipo = "A"
        while tipo not in ("C", "c", "P", "p"):
            tipo = input(
                "Ingrese el tipo de cliente: C:corporativo / P:Particular:  ")
        nombre = input("Ingrese el nombre: ")
        if tipo in ("C", "c"):
            contacto = input("ingrese el nombre del contacto: ")
            tc = input("ingrese el telefono del contacto: ")
        else:
            apellido = input("Ingrese el apellido: ")
        tel = input("Ingrese el Telefono: ")
        mail = input("Ingrese el Mail: ")

        if tipo in ("c", "C"):
            c = self.lista_clientes.nuevo_cliente_corporativo(
                nombre, contacto, tc, tel, mail)
        else:
            c = self.lista_clientes.nuevo_cliente_particular(
                nombre, apellido, tel, mail)
        if c is None:
            print("Error al cargar el cliente.")
        else:
            print("Cliente cargado con exito.")

    def modificar_particular(self):
        print("Modificar cliente Particular: ")
        id_cliente = int(input("Ingresa id de un Particular: "))
        obj_cliente = self.rc.get_one_particular(id_cliente)
        print(obj_cliente)
        opcion = int(
            input(""""Elige una opcion para modificar: 
                            1. Nombre
                            2. Apellido
                            3. Teléfono
                            4. Mail
                            0. Salir
                            : """))
        if opcion == 1:
            nuevo_nombre = input("Ingrese el nuevo NOMBRE:")
            obj_cliente.nombre = nuevo_nombre
            print("Nombre cambiado con exito.")

        elif opcion == 2:
            nuevo_apellido = input("Ingrese el nuevo APELLIDO: ")
            obj_cliente.apellido = nuevo_apellido
            print("Apellido cambiado con exito.")

        elif opcion == 3:
            nuevo_telefono = input("Ingrese el nuevo TELEFONO: ")
            obj_cliente.telefono = nuevo_telefono
            print("Telefono cambiado con exito.")

        elif opcion == 4:
            nuevo_mail = input("Ingrese un nuevo MAIL: ")
            obj_cliente.mail = nuevo_mail
            print("Mail cambiado con exito.")
        elif opcion == 0:
            return
        self.rc.update(obj_cliente)
        self.lista_clientes = ListaClientes()

    def modificar_corporativo(self):
        print("Modificar cliente Corporativo: ")
        id_cliente = int(input("Ingresa id de un Corporativo: "))
        obj_cliente = self.rc.get_one_corporativo(id_cliente)
        print(obj_cliente)
        opcion = int(
            input(""""Elige una opcion para modificar: 
                            1. Nombre empresa
                            2. Nombre contacto
                            3. Teléfono de contacto
                            4. Telefono
                            5. Mail
                            0. Salir
                            : """))
        if opcion == 1:
            nuevo_nombre_empresa = input(
                "Ingrese el nuevo NOMBRE DE LA EMPRESA:")
            obj_cliente.nombre_empresa = nuevo_nombre_empresa
            print("Nombre de empresa cambiado con exito.")

        elif opcion == 2:
            nuevo_nombre_contacto = input(
                "Ingrese el nuevo NOMBRE DE CONTACTO:")
            obj_cliente.nombre_contacto = nuevo_nombre_contacto
            print("Nombre de contacto cambiado con exito.")

        elif opcion == 3:
            nuevo_telefono_contacto = input(
                "Ingrese el nuevo TELEFONO DE CONTACTO: ")
            obj_cliente.telefono_contacto = nuevo_telefono_contacto
            print("Telefono de contacto cambiado con exito.")

        elif opcion == 4:
            nuevo_telefono = input("Ingrese el nuevo TELEFONO: ")
            obj_cliente.telefono = nuevo_telefono
            print("Telefono cambiado con exito.")

        elif opcion == 5:
            nuevo_mail = input("Ingrese un nuevo MAIL: ")
            obj_cliente.mail = nuevo_mail
            print("Mail cambiado con exito.")

        elif opcion == 0:
            return

        self.rc.update(obj_cliente)
        self.lista_clientes = ListaClientes()
        print("Cambio Exitoso:")
        print(obj_cliente)

    def borrar_cliente(self):
        lista = self.lista_clientes.lista
        for id_lista in lista:
            print(
                "=================================================================="
            )
            print(id_lista)
            print(
                "=================================================================="
            )
        id_elegido = int(
            input("Ingrese el ID del cliente que quiere eliminar: "))
        for id_lista in lista:
            if id_lista.id_cliente == id_elegido:
                cli = self.lista_clientes.rc.delete(id_lista)
                lista.remove(id_lista)
                print("Se elimino correctamente.")
                break

    def mostrar_trabajos(self, lista=None):
        if lista == None:
            lista = self.lista_trabajo.lista
        for trabajo in lista:
            print("====================================================")
            print("Cliente: ")
            print(trabajo.cliente)
            print("Trabajo: ")
            print("ID: ", trabajo.id_trabajo)
            print("Fecha de entrega: ", trabajo.fecha_entrega_propuesta)
            print("Fecha de entrega real: ", trabajo.fecha_entrega_real)
            print("Descripcion: ", trabajo.descripcion)
            print("Retirado: ", trabajo.retirado)
            print("====================================================")

    def nuevo_trabajo(self):
        obj_cliente = None
        while True:
            cliente = input("Ingrese el id del cliente: ")
            obj_cliente = self.rc.get_one(cliente)
            if obj_cliente != None:
                print(obj_cliente)
                break

        fecha_ingreso = datetime.date.today()
        while True:
            try:
                f = input("Ingrese la fecha propuesta (aaaa,mm,dd): ")
                fecha_propuesta = datetime.datetime.strptime(f, "%Y,%m,%d")
            except ValueError:
                print("Fecha no valida")
                continue
            break
        fecha_entrega_real = None
        descripcion = input("Ingrese la descripcion del trabajo: ")
        retirado = False

        nt = Trabajo(obj_cliente, fecha_ingreso, fecha_propuesta,
                     fecha_entrega_real, descripcion, retirado, None)
        resultado = self.rt.store(nt)
        self.lista_Trabajo = self.rt.get_all()

        print("Trabajo guardado exitosamente. Con el id ", resultado)

    def trabajo_finalizado(self):
        print("Finalizar trabajo: ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        obj_trabajo.fecha_entrega_real = datetime.date.today()
        print("")
        print("Trabajo finalizado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def trabajo_retirado(self):
        print("Marcar trabajo retirado : ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        obj_trabajo.retirado = True
        print("")
        print("Trabajo retirado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def modificar_trabajo(self):
        print("Modificar trabajo : ")
        id_trabajo = int(input("Ingresa id del trabajo: "))
        obj_trabajo = self.rt.get_one(id_trabajo)

        while True:
            try:
                f = input("Ingrese la nueva fecha propuesta (aaaa,mm,dd): ")
                fecha_propuesta = datetime.datetime.strptime(f, "%Y,%m,%d")
            except ValueError:
                print("Fecha no valida")
                continue
            break
        descripcion = input("Ingrese la nueva descripcion del trabajo: ")

        obj_trabajo.fecha_entrega_propuesta = fecha_propuesta
        obj_trabajo.descripcion = descripcion

        print("")
        print("Trabajo modificado con exito: ")
        print("")
        print("==============================================")
        print("ID: ", obj_trabajo.id_trabajo)
        print("Fecha de entrega: ", obj_trabajo.fecha_entrega_propuesta)
        print("Fecha de entrega real: ", obj_trabajo.fecha_entrega_real)
        print("Descripcion: ", obj_trabajo.descripcion)
        print("Retirado: ", obj_trabajo.retirado)
        print("==============================================")

        self.rt.update(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()

    def mostrar_no_retirados(self, lista=None):
        if lista == None:
            lista = self.lista_trabajo.lista
        for trabajo in lista:
            if trabajo.retirado == False and trabajo.fecha_entrega_real != None:
                print("===========================================")
                print("Cliente: ")
                print(trabajo.cliente)
                print("ID: ", trabajo.id_trabajo)
                print("Fecha de entrega: ", trabajo.fecha_entrega_propuesta)
                print("Fecha de entrega real: ", trabajo.fecha_entrega_real)
                print("Descripcion: ", trabajo.descripcion)
                print("Retirado: ", trabajo.retirado)
                print("===========================================")

    def eliminar_trabajo(self):
        id_elegido = int(
            input("Ingrese el ID del trabajo que quiere eliminar: "))
        obj_trabajo = self.rt.get_one(id_elegido)
        resultado = self.rt.delete(obj_trabajo)
        self.lista_trabajo = Lista_Trabajo()
        print("Eliminado: ", resultado)

    def salir(self):
        print("Saliste del programa. Gracias por todo.")
        sys.exit(0)