Exemple #1
0
    def get_funcionarios(self):
        try:
            from my_terceiro import Terceiro
        except:
            from terceiro import Terceiro

        return Terceiro().get_funcionarios()
Exemple #2
0
 def get_idade_terceiro(self, key):
     import dateutil
     value = 0
     self.kargs = get_model_record(model=self, key=key)
     #print (self.kargs)
     from terceiro import Terceiro
     pessoa = Terceiro(where="id='{terceiro}'".format(
         terceiro=self.kargs['terceiro'])).get()[0]
     #print (pessoa)
     return dateutil.relativedelta.relativedelta(
         datetime.date.today(), pessoa['data_nascimento']).years
class Janelas(QMainWindow):
    def __init__(self):
        super(Janelas, self).__init__()
        loadUi('principal.ui', self)
        self.setWindowTitle('Principal')

        self.buttonSegundo.clicked.connect(self.segundo)
        self.buttonTerceiro.clicked.connect(self.terceiro)
        self.menuSair.triggered.connect(self.sair_sistema)
        self.actionSegundo.triggered.connect(self.segundo)
        self.actionTerceiro.triggered.connect(self.terceiro)

    def segundo(self):
        self.frmsegundo = QMainWindow()
        self.widget = Segundo()
        self.widget.show()

    def terceiro(self):
        self.frmterceiro = QMainWindow()
        self.widget = Terceiro()
        self.widget.show()

    def sair_sistema(self):
        exit()
Exemple #4
0
 def efectuar_pagamento(self, key, window_id):
     """Esta acção efectua o pagamento"""
     active = False
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Pago'
     from terceiro import Terceiro
     terceiro = Terceiro(where="nome='Clientes Gerais'").get()[0]
     cliente = terceiro['id']
     conta_cliente = terceiro['a_receber']
     #Verifica se tem caixa aberta, se não tiver abre
     #Faz o pagamento em caixa
     from caixa import Caixa
     from linha_caixa import LinhaCaixa
     from terminal import Terminal
     terminal = Terminal(where="""name='Distribuicao'""").get(
     )  # substituir esta bosta para get_terminal
     if len(terminal) > 0:
         terminal = terminal[0]['id']
     caixa = Caixa(
         where=
         "estado = 'Aberta' AND terminal='{terminal}' AND data_inicial <= '{today}'"
         .format(terminal=terminal, today=record['data'])).get()
     if not caixa:
         caixa = Caixa(data_inicial=record['data'],
                       hora_inicial=time.strftime('%H:%M:%S'),
                       valor_inicial=0,
                       valor_final=0,
                       estado='Aberta',
                       user=session['user'],
                       vendedor=session['user'],
                       terminal=terminal).put()
     else:
         caixa = caixa[0]['id']
     from metodo_pagamento import MetodoPagamento
     metodos_pagamento = MetodoPagamento().get_options()
     first = True
     total_entregue = to_decimal('0')
     for metodo in metodos_pagamento:
         if bottle.request.forms.get(metodo[1]):
             method = to_decimal(str(bottle.request.forms.get(metodo[1])))
         else:
             method = to_decimal('0')
         if method > to_decimal('0'):
             total_entregue += to_decimal(
                 str(bottle.request.forms.get(metodo[1])))
     if total_entregue >= to_decimal(
             str(bottle.request.forms.get('total_a_pagar'))):
         for metodo in metodos_pagamento:
             if first == True:
                 default_metodo = metodo
                 first = False
             if bottle.request.forms.get(metodo[1]):
                 method = to_decimal(
                     str(bottle.request.forms.get(metodo[1])))
             else:
                 method = to_decimal('0')
             if method > to_decimal('0'):
                 linha_caixa = LinhaCaixa(
                     caixa=caixa,
                     descricao='Nossa Guia de Distribuição',
                     documento='distribuicao',
                     num_doc=record['numero'],
                     valor_documento=to_decimal(
                         str(bottle.request.forms.get('total_a_pagar'))),
                     terceiro=cliente,
                     metodo=metodo[0],
                     entrada=bottle.request.forms.get(metodo[1]),
                     saida=0,
                     active=active,
                     user=session['user']).put()
         troco = total_entregue - to_decimal(
             str(bottle.request.forms.get('total_a_pagar')))
         if troco > to_decimal('0'):
             linha_caixa = LinhaCaixa(
                 caixa=caixa,
                 descricao='Nossa Guia de Distribuição',
                 documento='distribuicao',
                 num_doc=record['numero'],
                 valor_documento=to_decimal(
                     str(bottle.request.forms.get('total_a_pagar'))),
                 terceiro=cliente,
                 metodo=default_metodo[0],
                 entrada=0,
                 saida=troco,
                 active=active,
                 user=session['user']).put()
         else:
             troco = to_decimal('0')
         record['residual'] = to_decimal(
             str(bottle.request.forms.get(
                 'total_a_pagar'))) - total_entregue + troco
         #Faz o lançamento contabilistico se tiver factura como movimento activo, se não como movimento geral
         #Vê o metodo de pagamento e lança na conta adequada
         from diario import Diario
         diario = Diario(where="tipo='caixa'").get()[0]['id']
         periodo = None
         from periodo import Periodo
         periodos = Periodo().get()
         for p in periodos:
             lista_datas = generate_dates(start_date=p['data_inicial'],
                                          end_date=p['data_final'])
             if str(format_date(record['data'])) in lista_datas:
                 periodo = p['id']
         if not periodo:
             return error_message(
                 'não existe periodo definido para a data em questão! \n')
         from movimento import Movimento
         from linha_movimento import LinhaMovimento
         movimento = Movimento(
             data=record['data'],
             numero=base_models.Sequence().get_sequence('movimento'),
             num_doc=record['numero'],
             descricao='Pagamento de Guia de Distribuição',
             diario=diario,
             documento='distribuicao',
             periodo=periodo,
             estado='Rascunho',
             user=session['user'],
             active=active).put()
         #print (record)
         Distribuicao(**record).put()
         for metodo in metodos_pagamento:
             if bottle.request.forms.get(metodo[1]):
                 method = to_decimal(
                     str(bottle.request.forms.get(metodo[1])))
             else:
                 method = to_decimal('0')
             if method > to_decimal('0'):
                 conta_pagamento = MetodoPagamento().get(
                     key=metodo[0])[0]['conta']
                 LinhaMovimento(movimento=movimento,
                                descricao='Pagamento de Talão de Venda',
                                conta=conta_pagamento,
                                quant_debito=to_decimal('0'),
                                debito=to_decimal(
                                    str(bottle.request.forms.get(
                                        metodo[1]))),
                                quant_credito=to_decimal('0'),
                                credito=to_decimal('0'),
                                user=session['user']).put()
                 LinhaMovimento(
                     movimento=movimento,
                     descricao='Pagamento de Guia de Distribuição',
                     conta=conta_cliente,
                     quant_debito=to_decimal('0'),
                     debito=to_decimal('0'),
                     quant_credito=to_decimal('0'),
                     credito=to_decimal(
                         str(bottle.request.forms.get(metodo[1]))),
                     user=session['user']).put()
         return form_edit(key='None', window_id=self.window_id)
     else:
         return error_message(
             'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!'
         )  #depois ver a possibilidade de ficar no mesmo sitio
Exemple #5
0
 def Confirmar(
         self, key,
         window_id):  #não tinha self nem key eu acrescentei mas não testei
     # Gera movimento contabilistico (conta de mercadorias contra conta de gastos)
     # Gera movimento de Stock (sai de armazem por contrapartida de cliente)
     #print ('Hello!!!')
     if key in ['None', None]:
         m_action = model_action(obj=self)
         m_action.save(key=None, internal=True)
     record_id = key
     #print ('model_get begin!')
     record = model.get(key=record_id)[0]
     #print (record)
     record['user'] = session['user']
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence('distribuicao')
     from diario import Diario
     diario = Diario(where="tipo='stock'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'],
                                      end_date=p['data_final'])
         if str(format_date(record['data'])) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message(
             'não existe periodo definido para o data em questão! \n')
     from armazem import Armazem
     armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id']
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     sujeito_iva = Terceiro(
         where="nome='Clientes Gerais'").get()[0]['sujeito_iva']
     from movimento import Movimento
     movimento = Movimento(
         data=record['data'],
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Nossa Guia de distribuição',
         diario=diario,
         documento='distribuicao',
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     from stock import Stock
     stock = Stock(data=record['data'],
                   numero=base_models.Sequence().get_sequence('stock'),
                   num_doc=record['numero'],
                   descricao='Nossa Guia de Distribuição',
                   documento='distribuicao',
                   periodo=periodo,
                   estado='Confirmado',
                   user=session['user']).put()
     Distribuicao(**record).put()
     from linha_distribuicao import LinhaDistribuicao
     record_lines = LinhaDistribuicao(
         where="distribuicao = '{distribuicao}'".format(
             distribuicao=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from linha_stock import LinhaStock
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado
             quantidade = to_decimal(line['quant_out']) - to_decimal(
                 line['quant_in'])
             product = Produto().get(key=line['produto'])[0]
             contas = Produto().get_accounts(line['produto'])
             conta_mercadorias = contas['conta_mercadorias']
             conta_gastos = contas['conta_gastos']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal('0')
             armazem_vendas = None
             familia = FamiliaProduto().get(key=product['familia'])
             if familia:
                 familia = familia[0]
                 if familia['armazem_vendas']:
                     armazem_vendas = familia['armazem_vendas']
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_gastos,
                            quant_debito=quantidade,
                            debito=line['valor_total'],
                            quant_credito=to_decimal('0'),
                            credito=to_decimal('0'),
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_mercadorias,
                            quant_debito=to_decimal('0'),
                            debito=to_decimal('0'),
                            quant_credito=quantidade,
                            credito=line['valor_total'],
                            user=session['user']).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_vendas,
                        quant_saida=quantidade,
                        quant_entrada=to_decimal('0'),
                        user=session['user']).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_cliente,
                        quant_saida=to_decimal('0'),
                        quant_entrada=quantidade,
                        user=session['user']).put()
         #print ('See You!!!')
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar guias de Distribuição sem linhas de Distribuição! \n'
         )
Exemple #6
0
 def get_funcionarios(self):
     return Terceiro().get_funcionarios()
Exemple #7
0
 def get_terceiros(self):
     return Terceiro().get_options()
Exemple #8
0
    def gerarRecibosSubsidios(self, key, funcionarios):
        self.kargs = get_model_record(model=self, key=key, force_db=True)

        este_periodo = "{ano}-{mes}".format(ano=self.kargs['ano'],
                                            mes=self.kargs['periodo'])

        funcionarios = []
        if (self.kargs['para_todos'] == True &
            (self.kargs['periodo'] in ('13', '14', '15'))):
            funcionarios = Terceiro(where="funcionario=True").get(
                order_by='nome')

        elif self.kargs['periodo'] in ('13', '14', '15'):

            sql = """SELECT t.* FROM terceiro t                
            WHERE (t.active = True OR t.active IS NULL)                
            AND t.id IN (
                SELECT fs.terceiro FROM funcionario_subsidio fs 
                WHERE (fs.active = True OR fs.active IS NULL)
                AND fs.salario = '{idSal}'
                )""".format(idSal=key)
            funcionarios = run_sql(sql)

        for func in funcionarios:
            contrato = ContratoFuncionario(where="terceiro='{id}'".format(
                id=func['id'])).get()
            if contrato:
                contrato = contrato[0]
                content = {
                    'estado': 'Rascunho',
                    'user': self.kargs['user'],
                    'salario': self.kargs['id'],
                    'terceiro': func['id'],
                    'periodo': self.kargs['periodo'],
                    'ano': self.kargs['ano']
                }
                idRecibo = ReciboSalario(**content).put()

                linhas = []
                #adicionar o salario
                linhas.append({
                    'nome': 'Salário',
                    'valor': contrato['salario_base'],
                    'tipo_rendimento': None,
                    'tipo_desconto': None
                })
                #adicionar o IUR
                iur = to_decimal(0)
                if contrato['tipo'] in ('Permanente', 'Temporario'):
                    #calcular a nova base tributavel (salario e rendiemento tributaveis)
                    salario_bruto_iur = to_decimal(
                        contrato['salario_base']) + to_decimal(
                            self.get_total_rendimento_tributaveis(
                                idFuncionario=func['id']))
                    iur = self.calcularIURfuncionario(
                        salario=salario_bruto_iur)
                elif contrato['tipo'] == 'Pensionista':
                    iur = self.calcularRetencaoPensionista(
                        salario=contrato['salario_base'])
                else:
                    iur = self.calcularIURprestadorServico(
                        salario=contrato['salario_base'])
                linhas.append({
                    'nome': 'IUR',
                    'valor': -iur,
                    'tipo_rendimento': None,
                    'tipo_desconto': None
                })
                #adicionar o desconto inps
                if contrato['tipo'] in ('Permanente', 'Temporario'):
                    salario_bruto_inps = to_decimal(
                        contrato['salario_base']) + to_decimal(
                            self.get_total_rendimento_Inps(
                                idFuncionario=func['id']))
                    inps = self.calcularInpsFuncionario(
                        salario=salario_bruto_inps)
                    linhas.append({
                        'nome': 'Segurança Social',
                        'valor': -inps,
                        'tipo_rendimento': None,
                        'tipo_desconto': None
                    })
                #adicionar os rendimentos
                rendimentos = RendimentoFuncionario(
                    where="terceiro='{id}'".format(id=func['id'])).get()
                for line in rendimentos:
                    tipo = TipoRendimento(where="id='{tr}'".format(
                        tr=line['tipo_rendimento'])).get()
                    if tipo:
                        linhas.append({
                            'nome': tipo[0]['nome'],
                            'valor': line['valor'],
                            'tipo_rendimento': tipo[0]['id'],
                            'tipo_desconto': None
                        })
                #adicionar os descontos
                print('\n\n\n\n##################1###################\n\n\n')
                descontos = DescontoFuncionario(
                    where="terceiro='{idTer}'".format(idTer=func['id'])).get()
                for line in descontos:
                    tipo = TipoDesconto(where="id='{tr}'".format(
                        tr=line['tipo_desconto'])).get()
                    if tipo:
                        tipo = tipo[0]
                        if tipo['taxa']:
                            if tipo['base'] == 'salario base':
                                valor = contrato['salario_base'] * line[
                                    'valor'] / 100
                                linhas.append({
                                    'nome': tipo['nome'],
                                    'valor': -valor,
                                    'tipo_rendimento': None,
                                    'tipo_desconto': tipo['id']
                                })
                            else:
                                valor = (contrato['salario_base'] +
                                         self.get_total_rendimento_tributaveis(
                                             idFuncionario=func['id'])
                                         ) * line['valor'] / 100
                                linhas.append({
                                    'nome': tipo['nome'],
                                    'valor': -valor,
                                    'tipo_rendimento': None,
                                    'tipo_desconto': tipo['id']
                                })
                        else:
                            linhas.append({
                                'nome': tipo['nome'],
                                'valor': -line['valor'],
                                'tipo_rendimento': None,
                                'tipo_desconto': tipo['id']
                            })
                #adicionar a outros descontos funcionario
                outrosDescontos = OutrosDescontosFuncionario(
                    where="terceiro='{idTer}' AND salario='{idSal}'".format(
                        idTer=func['id'], idSal=key)).get()
                for line in outrosDescontos:
                    tipo = TipoDesconto(where="id='{tr}'".format(
                        tr=line['tipo_desconto'])).get()
                    if tipo:
                        tipo = tipo[0]
                        if tipo['taxa']:
                            if tipo['base'] == 'salario base':
                                valor = contrato['salario_base'] * line[
                                    'valor'] / 100
                                linhas.append({
                                    'nome': tipo['nome'],
                                    'valor': -valor,
                                    'tipo_rendimento': None,
                                    'tipo_desconto': tipo['id']
                                })
                            else:
                                valor = (contrato['salario_base'] +
                                         self.get_total_rendimento_tributaveis(
                                             idFuncionario=func['id'])
                                         ) * line['valor'] / 100
                                linhas.append({
                                    'nome': tipo['nome'],
                                    'valor': -valor,
                                    'tipo_rendimento': None,
                                    'tipo_desconto': tipo['id']
                                })
                        else:
                            linhas.append({
                                'nome': tipo['nome'],
                                'valor': -line['valor'],
                                'tipo_rendimento': None,
                                'tipo_desconto': tipo['id']
                            })
                for line in linhas:
                    content = {
                        'user': self.kargs['user'],
                        'recibo_salario': idRecibo,
                        'nome': line['nome'],
                        'valor': line['valor'],
                        'tipo_rendimento': line['tipo_rendimento'],
                        'tipo_desconto': line['tipo_desconto']
                    }
                    LinhaReciboSalario(**content).put()

        self.kargs['estado'] = 'Gerado'
        self.put()
 def terceiro(self):
     self.frmterceiro = QMainWindow()
     self.widget = Terceiro()
     self.widget.show()
 def segundo(self):
     self.frmsegundo = QMainWindow()
     self.widget = Segundo()
     self.widget.show()