示例#1
0
 def Imprimir_Recibo(self, key, window_id):
     template = 'recibo'
     record = get_records_to_print(key=key, model=self)
     cliente = Terceiro().get(key=record['cliente'][0])[0]
     try:
         from my_contacto import Contacto
     except:
         from contacto import Contacto
     moradas = Contacto(where="terceiro='{cliente}'".format(cliente=cliente['id'])).get()
     if len(moradas) != 0:
         moradas=moradas[0]
     else:
         moradas = {'morada':None}
     if moradas['morada']:
         record['morada'] = moradas['morada']
     else:
         record['morada'] = ''
     if cliente['nif']:
         record['cliente_nif'] = cliente['nif']
     else:
         record['cliente_nif'] = ''
     caixas = []
     for pagamento in record['pagamentos']:
         caixas.append(pagamento['caixa'][0])
     sql = """
         SELECT id, data_inicial FROM caixa
         WHERE id {caixas}""".format(caixas = to_tuple(caixas))
     lista_datas_de_caixa = run_sql(sql)
     datas_de_caixa = {}
     for data in lista_datas_de_caixa:
         datas_de_caixa[str(data['id'])] = data['data_inicial']
     for pagamento in record['pagamentos']:
         pagamento['data'] = datas_de_caixa[pagamento['caixa'][0]]
     return Report(record=record, report_template=template).show()
示例#2
0
 def Imprimir(self, key, window_id):
     template = 'factura_cli'
     record = get_records_to_print(key=key, model=self)
     #print(record)
     cliente = Terceiro().get(key=record['cliente'][0])[0]
     try:
         from my_contacto import Contacto
     except:
         from contacto import Contacto
     moradas = Contacto(where="terceiro='{cliente}'".format(cliente=cliente['id'])).get()
     if len(moradas) != 0:
         moradas=moradas[0]
     else:
         moradas = {'morada':None}
     if moradas['morada']:
         record['morada'] = moradas['morada']
     else:
         record['morada'] = ''
     if cliente['nif']:
         record['cliente_nif'] = cliente['nif']
     else:
         record['cliente_nif'] = ''        
     if to_decimal(record['numero']) <10:
         record['numero']= str('00'+record['numero'])
     elif to_decimal(record['numero'])>9 & to_decimal(record['numero'])<100:
         record['numero']= str('0'+record['numero'])
     return Report(record=record, report_template=template).show()
示例#3
0
 def Facturar(self, key, window_id):
     #Gera Factura em rascunho!!!
     #Aqui se o a entrega estiver paga a factura deve de alguma forma reflectir isso ou seja deve estar logo como paga
     self.kargs = get_model_record(model = self, key = key)
     self.kargs['estado'] = 'Facturado'
     try:
         from my_factura_cli import FacturaCliente
     except:
         from factura_cli import FacturaCliente
     factura = FacturaCliente(data = self.kargs['data'], notas = self.kargs['notas'], entrega = self.kargs['id'], cliente = self.kargs['cliente'], residual = str(to_decimal('0')), estado = 'Rascunho', vendedor = self.kargs['user'], user = self.kargs['user']).put()
     self.kargs['factura'] = factura
     #Muda o movimento de não active para active
     try:
         from my_movimento import Movimento
     except:
         from movimento import Movimento
     movimentos = Movimento(where = "documento = 'entrega' and num_doc = {num_doc} ".format(num_doc = self.kargs['id'])).get()
     if movimentos:
         for movimento in movimentos:
             movimento['active'] = 'True'
             movimento['user'] = self.kargs['user']
             Movimento(**movimento).put()
     #Valida se o cliente é sujeito a iva
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     sujeito_iva = Terceiro(where="id=" + str(self.kargs['cliente'])).get()[0]['sujeito_iva']
     try:
         from my_linha_entrega import LinhaEntrega
     except:
         from linha_entrega import LinhaEntrega
     record_lines = LinhaEntrega(where = "entrega = '{entrega}'".format(entrega = self.kargs['id'])).get()
     if record_lines:
         try:
             from my_produto import Produto
         except:
             from produto import Produto
         try:
             from my_linha_factura_cli import LinhaFacturaCliente
         except:
             from linha_factura_cli import LinhaFacturaCliente
         for line in record_lines:
             quantidade = to_decimal(line['quantidade'])
             product = Produto().get(key = line['produto'])[0]
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal(0)
             total_sem_iva = line['valor_total']/(1+taxa_iva)
             iva = taxa_iva
             LinhaFacturaCliente(factura_cli = factura, unidade = line['unidade'], valor_unitario = line['valor_unitario'], produto = line['produto'], quantidade = quantidade, valor_total = line['valor_total'], desconto = line['desconto'], iva = iva, user = self.kargs['user']).put()
     self.put()
     ctx_dict = get_context(window_id)
     ctx_dict['main_key'] = self.kargs['id']
     set_context(window_id, ctx_dict)
     return form_edit(window_id = window_id).show()
示例#4
0
 def Facturar(self, key, window_id):
     #Gera Factura em rascunho!!!
     #Altera o movimento contabilistico para active!!!
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session.get('user', None)
     record['estado'] = 'Facturado'
     from factura_cli import FacturaCliente
     factura = FacturaCliente(data=record['data'],
                              notas=record['notas'],
                              talao=record['id'],
                              cliente=record['cliente'],
                              residual=str(to_decimal('0')),
                              estado='Rascunho',
                              user=session.get('user', None)).put()
     record['factura'] = factura
     Talao(**record).put()
     #Muda o movimento de não active para active
     from movimento import Movimento
     movimentos = Movimento(
         where="documento='talao'and num_doc={num_doc} ".format(
             num_doc=record['id'])).get()
     if movimentos:
         for movimento in movimentos:
             movimento['active'] = 'True'
             movimento['user'] = session.get('user', None)
             Movimento(**movimento).put()
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     sujeito_iva = Terceiro(where="id='{cliente}'".format(
         cliente=str(record['cliente']))).get()[1][0]['sujeito_iva']
     from linha_talao import LinhaTalao
     record_lines = LinhaTalao(where="talao = '{talao}'".format(
         talao=record['id'])).get()
     if record_lines:
         from linha_factura_cli import LinhaFacturaCliente
         for line in record_lines:
             quantidade = to_decimal(str(line['quantidade']))
             LinhaFacturaCliente(factura_cli=factura,
                                 produto=line['produto'],
                                 quantidade=quantidade,
                                 valor_total=line['valor_total'],
                                 desconto=line['desconto'],
                                 iva=line['iva'],
                                 valor_unitario=line['valor_unitario'],
                                 ean=line['ean'],
                                 user=session.get('user', None)).put()
     return form_edit(key=key, window_id=window_id)
示例#5
0
 def Confirmar(self, key, window_id):
     # Gera movimento contabilistico (conta de receitas contra conta de terceiros)
     if key == 'None':
         #Grava o registo se ainda não estiver guardado
         key = get_actions(request=bottle.request,
                           action='save',
                           key=None,
                           model_name=model.__model_name__,
                           title=model.__title__,
                           name=model.__name__,
                           internal=True)
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence(
         'leitura_tecnica')
     from diario import Diario
     diario = Diario(where="tipo='vendas'").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')
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     terceiro = Terceiro(where="id='{cliente}'".format(
         cliente=record['cliente'])).get()[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     from movimento import Movimento
     movimento = Movimento(
         data=record['data'],
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Nossa Factura',
         diario=diario,
         documento='leitura_tecnica',
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     record['movimento'] = movimento
     LeituraTecnica(**record).put()
     from linha_leitura_tecnica import LinhaLeituraTecnica
     record_lines = LinhaLeituraTecnica(
         where="leitura_tecnica = '{factura}'".format(
             factura=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             quantidade = float(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             conta_mercadorias = product['conta_receitas']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = 0.0
             #familia = FamiliaProduto().get(key=product['familia'])[1][0]
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_terceiro,
                            quant_debito=quantidade,
                            debito=total_sem_iva,
                            quant_credito=0.0,
                            credito=0.0,
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_receitas,
                            quant_debito=0.0,
                            debito=0.0,
                            quant_credito=quantidade,
                            credito=total_sem_iva,
                            user=session['user']).put()
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar facturas sem linhas de factura! \n')
示例#6
0
 def get_tac(self):
     return Terceiro().get_tac()
示例#7
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'
     #Verifica se tem caixa aberta, se não tiver abre
     #Faz o pagamento em caixa
     try:
         from my_caixa import Caixa
     except:
         from caixa import Caixa
     try:
         from my_linha_caixa import LinhaCaixa
     except:
         from linha_caixa import LinhaCaixa
     try:
         from my_terminal import Terminal
     except:
         from terminal import Terminal
     terminal = Terminal(where="""name='Esplanada'""").get()
     if terminal[0] > 0:
         terminal = terminal[1][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']
     if record['factura']:
         active = True
     record['estado'] = 'Pago'
     try:
         from my_metodo_pagamento import MetodoPagamento
     except:
         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='Nosso Talão de Bar',
                     documento='talao_bar',
                     num_doc=record['numero'],
                     valor_documento=to_decimal(
                         str(bottle.request.forms.get('total_a_pagar'))),
                     terceiro=record['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='Nosso Talão de Bar',
                 documento='talao_bar',
                 num_doc=record['numero'],
                 valor_documento=to_decimal(
                     str(bottle.request.forms.get('total_a_pagar'))),
                 terceiro=record['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
         try:
             from my_diario import Diario
         except:
             from diario import Diario
         diario = Diario(where="tipo='caixa'").get()[0]['id']
         periodo = None
         try:
             from my_periodo import Periodo
         except:
             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')
         try:
             from my_movimento import Movimento
         except:
             from movimento import Movimento
         try:
             from my_linha_movimento import LinhaMovimento
         except:
             from linha_movimento import LinhaMovimento
         movimento = Movimento(
             data=record['data'],
             numero=base_models.Sequence().get_sequence('movimento'),
             num_doc=record['numero'],
             descricao='Pagamento de Talão de Bar',
             diario=diario,
             documento='talao_bar',
             periodo=periodo,
             estado='Rascunho',
             user=session['user'],
             active=active).put()
         TalaoBar(**record).put()
         try:
             from my_terceiro import Terceiro
         except:
             from terceiro import Terceiro
         conta_cliente = Terceiro().get(
             key=record['cliente'])[0]['a_receber']
         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 Bar',
                                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 Talão de Bar',
                                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=window_id)
     else:
         return '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
示例#8
0
 def get_terceiros(self):
     return Terceiro().get_funcionarios()
示例#9
0
 def get_clientes(self):
     return Terceiro().get_clientes()
示例#10
0
    def put_informacao_modelo(self, key):
        """metodo que coloca as informações dos anexos no modelo dpr"""
        self.kargs = get_model_record(model=self, key=key)
        anexoSal = XMLAnexoSalarioDPR(where="xml_modelo_dpr='{id}'".format(
            id=key)).get()
        if anexoSal:
            self.kargs['g1'] = XMLAnexoSalarioDPR().get_ir_teu(
                key=anexoSal[0]['id'])

        anexoForn = XMLAnexoFornecedorDPR(where="xml_modelo_dpr='{id}'".format(
            id=key)).get()
        if anexoForn:
            linhas = XMLLinhaAnexoFornecedorDPR(
                where="xml_anexo_fornecedor_dpr='{id}'".format(
                    id=anexoForn[0]['id'])).get()
            for linha in linhas:
                if linha['tipologia'] in ('B.1', 'B.2', 'B.3', 'B.4', 'B.5'):
                    self.kargs['g2'] = to_decimal(
                        self.kargs['g2']) + to_decimal(linha['ir_teu'])
                elif linha['tipologia'] in ('C.1', 'C.2', 'C.3', 'C.4'):
                    self.kargs['g3'] = to_decimal(
                        self.kargs['g3']) + to_decimal(linha['ir_teu'])
                elif linha['tipologia'] in ('D.1', 'D.2'):
                    terceiro = Terceiro(
                        where="nome='{nome}' AND nif='{nif}'".format(
                            nome=linha['designacao'], nif=linha['nif'])).get()
                    if terceiro:
                        if terceiro[0]['tipo_entidade'] == 'pessoa_colectiva':
                            self.kargs['g5'] = to_decimal(
                                self.kargs['g5']) + to_decimal(linha['ir_teu'])
                        else:
                            self.kargs['g4'] = to_decimal(
                                self.kargs['g4']) + to_decimal(linha['ir_teu'])
                else:
                    self.kargs['g6'] = to_decimal(
                        self.kargs['g6']) + to_decimal(linha['ir_teu'])

        anexoCli = XMLAnexoClienteDPR(where="xml_modelo_dpr='{id}'".format(
            id=key)).get()
        if anexoCli:
            linhas = XMLLinhaAnexoClienteDPR(
                where="xml_anexo_cliente_dpr='{id}'".format(
                    id=anexoCli[0]['id'])).get()
            for linha in linhas:
                if linha['tipologia'] in ('B.1', 'B.2', 'B.3', 'B.4', 'B.5'):
                    self.kargs['g2'] = to_decimal(
                        self.kargs['g2']) + to_decimal(linha['ir_teu'])
                elif linha['tipologia'] in ('C.1', 'C.2', 'C.3', 'C.4'):
                    self.kargs['g3'] = to_decimal(
                        self.kargs['g3']) + to_decimal(linha['ir_teu'])
                elif linha['tipologia'] in ('D.1', 'D.2'):
                    terceiro = Terceiro(
                        where="nome='{nome}' AND nif='{nif}'".format(
                            nome=linha['designacao'], nif=linha['nif'])).get()
                    if terceiro:
                        if terceiro[0]['tipo_entidade'] == 'pessoa_colectiva':
                            self.kargs['g5'] = to_decimal(
                                self.kargs['g5']) + to_decimal(linha['ir_teu'])
                        else:
                            self.kargs['g4'] = to_decimal(
                                self.kargs['g4']) + to_decimal(linha['ir_teu'])
                else:
                    self.kargs['g6'] = to_decimal(
                        self.kargs['g6']) + to_decimal(linha['ir_teu'])
        #guardar tudo
        self.put()
示例#11
0
 def Gerar_Factura(self, key, window_id):
     #Gera Factura em rascunho!!!
     self.kargs = get_model_record(model=self, key=key)
     self.kargs['estado'] = 'Com Factura'
     try:
         from my_factura_cli import FacturaCliente
     except:
         from factura_cli import FacturaCliente
     factura = FacturaCliente(data=self.kargs['data'],
                              notas=self.kargs['notas'],
                              entrega=self.kargs['id'],
                              cliente=self.kargs['cliente'],
                              residual=str(to_decimal('0')),
                              estado='Rascunho',
                              user=self.kargs['user']).put()
     self.kargs['factura'] = factura
     #Valida se o cliente é sujeito a iva
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     sujeito_iva = Terceiro(where="id='{cliente}'".format(
         cliente=str(self.kargs['cliente']))).get()[0]['sujeito_iva']
     try:
         from my_linha_proforma import LinhaProforma
     except:
         from linha_proforma import LinhaProforma
     record_lines = LinhaProforma(where="proforma = '{proforma}'".format(
         proforma=self.kargs['id'])).get()
     if record_lines:
         try:
             from my_produto import Produto
         except:
             from produto import Produto
         try:
             from my_linha_factura_cli import LinhaFacturaCliente
         except:
             from linha_factura_cli import LinhaFacturaCliente
         for line in record_lines:
             quantidade = to_decimal(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal(0)
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             iva = taxa_iva
             LinhaFacturaCliente(factura_cli=factura,
                                 unidade=line['unidade'],
                                 valor_unitario=line['valor_unitario'],
                                 produto=line['produto'],
                                 quantidade=quantidade,
                                 valor_total=line['valor_total'],
                                 desconto=line['desconto'],
                                 iva=iva,
                                 user=self.kargs['user']).put()
     self.put()
     ctx_dict = get_context(window_id)
     ctx_dict['main_key'] = self.kargs['id']
     set_context(window_id, ctx_dict)
     return form_edit(window_id=window_id).show()
示例#12
0
    def Confirmar(self, key, window_id, internal = False):
        """Gera movimento contabilistico (conta de receitas contra conta de terceiros)"""
        #print ('Inicio do confirmar factura_cli')
        self.kargs = get_model_record(model = self, key = key, force_db = self.__force_db__)

        if self.kargs['estado'] == 'Rascunho':            
            self.kargs['estado'] = 'Confirmado'
            self.kargs['residual'] = self.get_total(key = key)
            if not self.kargs['numero']:
                self.kargs['numero'] = base_models.Sequence().get_sequence('factura_cli')
            try:
                from my_diario import Diario
            except:
                from diario import Diario
            diario = Diario().get_diario(diario = 'vendas')
            try:
                from my_periodo import Periodo
            except:
                from periodo import Periodo
            periodo = Periodo().get_periodo(data = self.kargs['data'])
            #Valida se o cliente é sujeito a iva
            try:
                from my_terceiro import Terceiro
            except:
                from terceiro import Terceiro
            terceiro = Terceiro().get(key = self.kargs['cliente'])[0]
            sujeito_iva = terceiro['sujeito_iva']
            conta_terceiro = terceiro['a_receber']
            try:
                from my_movimento import Movimento
            except:
                from movimento import Movimento
            movimento = Movimento(data = self.kargs['data'], numero = base_models.Sequence().get_sequence('movimento'), num_doc = self.kargs['numero'], descricao = 'Nossa Factura', diario = diario, documento = 'factura_cli', periodo = periodo, estado = 'Confirmado', user = self.kargs['user']).put()
            #self.kargs['movimento'] = movimento
            try:
                from my_linha_factura_cli import LinhaFacturaCliente
            except:
                from linha_factura_cli import LinhaFacturaCliente
            record_lines = LinhaFacturaCliente(where = "factura_cli = '{factura}'".format(factura = self.kargs['id'])).get()
            if record_lines:
                try:
                    from my_linha_movimento import LinhaMovimento
                except:
                    from linha_movimento import LinhaMovimento
                try:
                    from my_produto import Produto
                except:
                    from produto import Produto
                try:
                    from my_familia_produto import FamiliaProduto
                except:
                    from familia_produto import FamiliaProduto
                for line in record_lines:
                    # aqui depois considerar a contabilização do desconto
                    quantidade = to_decimal(line['quantidade'])
                    product = Produto().get(key = line['produto'])[0]
                    contas = Produto().get_accounts(line['produto'])
                    #print (contas)
                    conta_receitas = contas['conta_receitas']
                    if sujeito_iva:
                        taxa_iva = product['iva']
                    else:
                        taxa_iva = to_decimal(0)
                    #familia = FamiliaProduto().get(key=product['familia'])[0]
                    descricao = product['nome']
                    total_sem_iva = line['valor_total']#/(1+taxa_iva)
                    #fazer o lancamento das receitas mas tambem do iva
                    LinhaMovimento(movimento = movimento, descricao = descricao, conta = conta_terceiro, quant_debito = quantidade, debito = total_sem_iva, quant_credito = to_decimal(0), credito = to_decimal(0), user = self.kargs['user']).put()
                    LinhaMovimento(movimento = movimento, descricao = descricao, conta = conta_receitas, quant_debito = to_decimal(0), debito = to_decimal(0), quant_credito = quantidade, credito = total_sem_iva, user = self.kargs['user']).put()
                self.put()
                ctx_dict = get_context(window_id)
                ctx_dict['main_key'] = self.kargs['id']
                set_context(window_id, ctx_dict)                
                result = form_edit(window_id = window_id).show()
            else:
                result = error_message('Não pode confirmar facturas sem linhas de factura! \n')
        if not internal:
            #não foi chamado pela side_bar e por isso deverá devolver o form, se vem do side_bar não tem necessidade            
            return result
示例#13
0
 def efectuar_pagamento(self, key, window_id):
     """Esta acção efectua o pagamento"""
     record_id = key
     self.kargs = self.get(key=record_id)[0]
     self.kargs['user'] = bottle.request.session['user']
     self.kargs['id'] = key
     #Verifica se tem caixa aberta, se não tiver abre e deve atribuir um numero de caixa de imediato para que dessa forma possa constar no recibo!
     #Faz o pagamento em caixa
     try:
         from my_caixa import Caixa
     except:
         from caixa import Caixa
     try:
         from my_linha_caixa import LinhaCaixa
     except:
         from linha_caixa import LinhaCaixa
     caixa = Caixa(where="estado = 'Aberta' AND vendedor={user}".format(user=self.kargs['user'])).get()
     if not caixa:
         caixa = Caixa(data_inicial=datetime.date.today(), hora_inicial=time.strftime('%H:%M'), valor_inicial=0, valor_final=0 , estado='Aberta', terminal=get_terminal(bottle.request.session['terminal']), user=self.kargs['user'], vendedor=self.kargs['user'], numero=base_models.Sequence().get_sequence('caixa')).put()
     else:
         caixa = caixa[0]['id']
     try:
         from my_metodo_pagamento import MetodoPagamento
     except:
         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])))
     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 Factura ao Cliente', documento='factura_cli', num_doc=self.kargs['numero'], valor_documento=to_decimal(bottle.request.forms.get('total_a_pagar')), terceiro=self.kargs['cliente'], metodo=metodo[0], entrada=bottle.request.forms.get(metodo[1]), saida=0, user=self.kargs['user']).put()
     troco = total_entregue - to_decimal(bottle.request.forms.get('total_a_pagar'))
     if troco > to_decimal(0):
         linha_caixa = LinhaCaixa(caixa=caixa, descricao='Nossa Factura ao Cliente', documento='factura_cli', num_doc=self.kargs['numero'], valor_documento=to_decimal(bottle.request.forms.get('total_a_pagar')), terceiro=self.kargs['cliente'], metodo=default_metodo[0], entrada=0, saida=troco, user=self.kargs['user']).put()
     else:
         troco = to_decimal(0)
     self.kargs['residual'] = to_decimal(bottle.request.forms.get('total_a_pagar')) - total_entregue + troco
     #Faz o lançamento contabilistico
     #Vê o metodo de pagamento e lança na conta adequada
     try:
         from my_diario import Diario
     except:
         from diario import Diario
     diario = Diario(where="tipo='caixa'").get()[0]['id']
     periodo = None
     try:
         from my_periodo import Periodo
     except:
         from periodo import Periodo
     periodos = Periodo().get()[1]
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final'])
         if str(format_date(self.kargs['data'])) in lista_datas:
             periodo = p['id']
     try:
         from my_movimento import Movimento
     except:
         from movimento import Movimento
     try:
         from my_linha_movimento import LinhaMovimento
     except:
         from linha_movimento import LinhaMovimento
     movimento = Movimento(data= datetime.date.today(), numero=base_models.Sequence().get_sequence('movimento'), num_doc=self.kargs['numero'], descricao='Pagamento de Factura', diario=diario, documento='factura_cli', periodo=periodo, estado='Rascunho', user=self.kargs['user']).put()
     if self.kargs['residual'] <= 0:
         self.kargs['estado'] = 'Pago'
     self.put()
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     conta_cliente = Terceiro().get(key=self.kargs['cliente'])[0]['a_receber']
     for metodo in metodos_pagamento:
         if bottle.request.forms.get(metodo[1]):
             method = to_decimal(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 Nota de Entrega', conta=conta_pagamento, quant_debito=to_decimal(0), debito=to_decimal(bottle.request.forms.get(metodo[1])), quant_credito=to_decimal(0), credito=to_decimal(0), user=self.kargs['user']).put()
             LinhaMovimento(movimento=movimento, descricao='Pagamento de Nota de Entrega', conta=conta_cliente, quant_debito=to_decimal(0), debito=to_decimal(0), quant_credito=to_decimal(0), credito=to_decimal(bottle.request.forms.get(metodo[1])), user=self.kargs['user']).put()
     return form_edit(window_id=window_id).show()
示例#14
0
 def get_fornecedores(self):
     return Terceiro().get_fornecedores()
示例#15
0
 def Cancelar(self, key, window_id):
     #Estorna movimento contabilistico
     #extorna caso confirmada ou simplesmente cancela se em rascunho
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Cancelado'
     from diario import Diario
     diario = Diario(where="tipo='vendas'").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(str(datetime.date.today()))) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message(
             'não existe periodo definido para o data em questão! \n')
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     terceiro = Terceiro(where="id='{cliente}'".format(
         cliente=record['cliente'])).get()[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     #Tanto no movimento como no stock eu poderei ter vários movimentos, por exemplo o movimento em si e a anulação, além disso teremos que ter reconciliação de movimentos.
     from movimento import Movimento
     movimento = Movimento(
         data=datetime.date.today(),
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Anulação de Nossa Factura',
         documento='leitura_tecnica',
         diario=diario,
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     record['movimento'] = movimento
     LeituraTecnica(**record).put()
     from linha_leitura_tecnica import LinhaLeituraTecnica
     record_lines = LinhaLeituraTecnica(
         where="leitura_tecnica = '{factura}'".format(
             factura=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             quantidade = float(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             conta_receitas = product['conta_receitas']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = 0.0
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_receitas,
                            quant_debito=quantidade,
                            debito=total_sem_iva,
                            quant_credito=0.0,
                            credito=0.0,
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_terceiro,
                            quant_debito=0.0,
                            debito=0.0,
                            quant_credito=quantidade,
                            credito=total_sem_iva,
                            user=session['user']).put()
         return form_edit(key=key, window_id=window_id)
示例#16
0
 def get_informacao_salario(self, key):
     self.kargs = get_model_record(model=self, key=key)
     salarios = RHFolhaSalario(
         where=
         "to_char(date_create,'YYYY-MM')='{ano}-{periodo}' AND (estado='Recibos Confirmado' OR estado='Pago')"
         .format(ano=self.kargs['ano'],
                 periodo=self.kargs['periodo'])).get()
     if salarios:
         #guadar o anexo_salario
         content = {
             'user': self.kargs['user'],
             'xml_modelo_dpr': str(key),
             'nome': erp_config.enterprise,
             'nif': erp_config.nif,
             'ano': self.kargs['ano'],
             'periodo': self.kargs['periodo'],
             'cd_af': self.kargs['cd_af'],
             'dec': self.kargs['dec'],
             'dt_emissao': self.kargs['dt_emissao']
         }
         id_anexo = XMLAnexoSalarioDPR(**content).put()
         for salario in salarios:
             recibos = RHReciboSalario(
                 where=
                 "rh_folha_salario='{id}' AND (estado='Confirmado' OR estado='Pago')"
                 .format(id=salario['id'])).get()
             if recibos:
                 for recibo in recibos:
                     terceiro = Terceiro(where="id='{ter}'".format(
                         ter=recibo['terceiro'])).get()
                     content = {
                         'user':
                         self.kargs['user'],
                         'xml_anexo_salario_dpr':
                         str(id_anexo),
                         'designacao':
                         terceiro[0]['nome'],
                         'nif':
                         terceiro[0]['nif'],
                         'periodo':
                         "{ano}-{mes}".format(ano=recibo['ano'],
                                              mes=recibo['periodo']),
                         'base':
                         int(RHReciboSalario().get_salario(
                             key=recibo['id'])),
                         'aces':
                         int(RHReciboSalario().get_rendimentosAcessorios(
                             key=recibo['id'])),
                         'isento':
                         int(RHReciboSalario().get_rendimentosIsentos(
                             key=recibo['id'])),
                         'trib':
                         int(RHReciboSalario().get_rendimentosTributaveis(
                             key=recibo['id'])),
                         'tipologia':
                         self.get_tipologiaFuncionario(
                             tipoFunc=recibo['tipo_funcionario']),
                         'ir_teu':
                         int(RHReciboSalario().get_retencao(
                             key=recibo['id'])),
                         'inps':
                         int(RHReciboSalario().get_segurancaSocial(
                             key=recibo['id'])),
                         'outros':
                         int(RHReciboSalario().get_outrosRetencoes(
                             key=recibo['id'])),
                         'tp_oper':
                         self.kargs['tipo_operacao']
                     }
                     XMLLinhaAnexoSalarioDPR(**content).put()
示例#17
0
 def Confirmar(self, key, window_id):
     # Gera movimento contabilistico (conta de mercadorias contra conta de gastos)
     # Gera movimento de Stock (sai de armazem por contrapartida de cliente)
     #print (key)
     if key in ['None', None]:
         key = get_actions(action='save',
                           key=None,
                           model_name=model.__model_name__,
                           internal=True)
     #print (key)
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session.get('user', None)
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence('talao')
     record['residual'] = model.get_total(key=record_id)
     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']
     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="id='{cliente}'".format(
         cliente=str(record['cliente']))).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='Nosso Talão de Venda',
         diario=diario,
         documento='talao',
         periodo=periodo,
         estado='Confirmado',
         user=session.get('user', None),
         active=False).put()
     from stock import Stock
     stock = Stock(data=record['data'],
                   numero=base_models.Sequence().get_sequence('stock'),
                   num_doc=record['numero'],
                   descricao='Nosso Talão de Venda',
                   documento='talao',
                   periodo=periodo,
                   estado='Confirmado',
                   user=session.get('user', None)).put()
     Talao(**record).put()
     from linha_talao import LinhaTalao
     record_lines = LinhaTalao(where="talao = '{talao}'".format(
         talao=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(str(line['quantidade']))
             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.get('user', None)).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.get('user', None)).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_vendas,
                        quant_saida=quantidade,
                        quant_entrada=to_decimal('0'),
                        user=session.get('user', None)).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_cliente,
                        quant_saida=to_decimal('0'),
                        quant_entrada=quantidade,
                        user=session.get('user', None)).put()
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar talões sem linhas de Talão! \n')
示例#18
0
    def get_informacao_fornecedor(self, key):
        self.kargs = get_model_record(model=self, key=key)
        if self.kargs['forn'] == '1':
            facturas = FacturaFornecedor(
                where=
                "retencao='SIM' AND to_char(date_create,'YYYY-MM')='{ano}-{mes}'"
                .format(ano=self.kargs['ano'],
                        mes=self.kargs['periodo'])).get()
            if facturas:
                print("\n\n\n\nRRRRRRRRRRRRRRRRRRRRRR\n\n", facturas,
                      "\nRRRRRRRRRRRRRRRRRRRRR\n\n\n\n")
                content = {
                    'user': self.kargs['user'],
                    'xml_modelo_dpr': str(key),
                    'estado': 'Gerado',
                    'nome': erp_config.enterprise,
                    'nif': erp_config.nif,
                    'ano': self.kargs['ano'],
                    'periodo': self.kargs['periodo'],
                    'cd_af': self.kargs['cd_af'],
                    'dec': self.kargs['dec'],
                    'dt_emissao': self.kargs['dt_emissao']
                }
                id_anexo = XMLAnexoFornecedorDPR(**content).put()

                for factura in facturas:
                    terceiro = Terceiro(where="id='{id}'".format(
                        id=factura['fornecedor'])).get()
                    if terceiro:
                        terceiro = terceiro[0]
                        linhas = LinhaFacturaFornecedor(
                            where="factura_forn='{id}'".format(
                                id=factura['id'])).get()
                        if linhas:
                            produto = Produto(where="id='{id}'".format(
                                id=linhas[0]['produto'])).get()
                            if produto:
                                content = {
                                    'user':
                                    self.kargs['user'],
                                    'xml_anexo_fornecedor_dpr':
                                    str(id_anexo),
                                    'origem':
                                    terceiro['origem'],
                                    'designacao':
                                    terceiro['nome'],
                                    'nif':
                                    terceiro['nif'],
                                    'tp_doc':
                                    'FT',
                                    'serie':
                                    factura['serie'],
                                    'num_doc':
                                    factura['numero'],
                                    'dt_recibo':
                                    factura['data'],
                                    'vl_recibo':
                                    factura['total'],
                                    'tipologia':
                                    self.get_tipologiaCliFornecedor(
                                        rendimento=produto[0]['tipologia'],
                                        entidade=terceiro['tipo_entidade']),
                                    'tx_ret':
                                    int(to_decimal(factura['taxa_retencao'])),
                                    'ir_teu':
                                    factura['valor_retido'],
                                    'tp_oper':
                                    self.kargs['tipo_operacao']
                                }
                                XMLLinhaAnexoFornecedorDPR(**content).put()
示例#19
0
 def Confirmar(self, key, window_id):
     # Gera movimento contabilistico (conta de mercadorias contra conta de gastos)
     # Gera movimento de Stock (sai de armazem por contrapartida de cliente)
     #       if key in ['None', None]:
     #           m_action = model_action(obj=self)
     #           key = m_action.save(key=None, internal=True)
     self.kargs = get_model_record(model=self, key=key)
     self.kargs['estado'] = 'Confirmado'
     self.kargs['residual'] = self.get_total(key=key)
     if not self.kargs['numero']:
         self.kargs['numero'] = base_models.Sequence().get_sequence('entrega')
     try:
         from my_diario import Diario
     except:
         from diario import Diario
     diario = Diario().get_diario(diario = 'stock')
     try:
         from my_periodo import Periodo
     except:
         from periodo import Periodo
     periodo = Periodo().get_periodo(data = self.kargs['data'])
     try:
         from my_armazem import Armazem
     except:
         from armazem import Armazem
     armazem_cliente = Armazem(where = "tipo = 'cliente'").get()[0]['id']
     #Valida se o cliente é sujeito a iva
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     terceiro = Terceiro().get(key = self.kargs['cliente'])[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     try:
         from my_movimento import Movimento
     except:
         from movimento import Movimento
     movimento = Movimento(data = self.kargs['data'], numero = base_models.Sequence().get_sequence('movimento'), num_doc = self.kargs['numero'], descricao = 'Nossa Nota de Entrega', diario = diario, documento = 'entrega', periodo = periodo, estado = 'Rascunho', user = self.kargs['user'], active = False).put()
     try:
         from my_stock import Stock
     except:
         from stock import Stock
     stock = Stock(data = self.kargs['data'], numero = base_models.Sequence().get_sequence('stock'), num_doc = self.kargs['numero'], descricao = 'Nossa Nota de Entrega', documento = 'entrega', periodo = periodo, estado = 'Confirmado', user = self.kargs['user']).put()
     try:
         from my_linha_entrega import LinhaEntrega
     except:
         from linha_entrega import LinhaEntrega
     record_lines = LinhaEntrega(where = "entrega = '{entrega}'".format(entrega = self.kargs['id'])).get()
     if record_lines:
         try:
             from my_linha_movimento import LinhaMovimento
         except:
             from linha_movimento import LinhaMovimento
         try:
             from my_linha_stock import LinhaStock
         except:
             from linha_stock import LinhaStock
         try:
             from my_produto import Produto
         except:
             from produto import Produto
         try:
             from my_familia_produto import FamiliaProduto
         except:
             from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto e do iva
             quantidade = line['quantidade']
             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 = self.kargs['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 = self.kargs['user']).put()
             LinhaStock(stock = stock, descricao = descricao, produto = line['produto'], armazem = armazem_vendas, quant_saida = quantidade, quant_entrada = to_decimal('0'), user = self.kargs['user']).put()
             LinhaStock(stock = stock, descricao = descricao, produto = line['produto'], armazem = armazem_cliente, quant_saida = to_decimal('0'), quant_entrada = quantidade, user = self.kargs['user']).put()
         self.put()
         ctx_dict = get_context(window_id)
         ctx_dict['main_key'] = self.kargs['id']
         set_context(window_id, ctx_dict)
         return form_edit(window_id = window_id).show()
     else:
         return error_message('Não pode confirmar entregas sem linhas de Entrega! \n')
示例#20
0
 def get_fornecedores(self):
     #print('estou em get_fornecedores do factura fornecedor')
     return Terceiro().get_fornecedores()
示例#21
0
 def efectuar_pagamento(self, key, window_id):
     """Esta acção efectua o pagamento"""
     self.kargs = get_model_record(model = self, key = key, force_db = True)
     self.kargs['estado'] = 'Pago'
     #print (self.kargs, self)
     #Verifica se tem caixa aberta, se não tiver abre
     #Faz o pagamento em caixa
     #print ('inicio do efectuar pagamento')
     try:
         from my_caixa import Caixa
     except:
         from caixa import Caixa
     try:
         from my_linha_caixa import LinhaCaixa
     except:
         from linha_caixa import LinhaCaixa
     #print ('1')
     try:
         from my_metodo_pagamento import MetodoPagamento
     except:
         from metodo_pagamento import MetodoPagamento
     metodos_pagamento = MetodoPagamento().get_options()
     first = True
     total_entregue = to_decimal('0')
     #print ('1.1')
     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])))
     #print ('1.2')
     if total_entregue >= to_decimal(str(bottle.request.forms.get('total_a_pagar'))):
         caixa = Caixa(where = "estado = 'Aberta' AND vendedor = '{user}'".format(user = self.kargs['user'])).get()
         if not caixa:
             caixa = Caixa(data_inicial = datetime.date.today(), hora_inicial = time.strftime('%H:%M'), valor_inicial = 0, valor_final = 0 , estado = 'Aberta', terminal = get_terminal(bottle.request.session['terminal']), user = self.kargs['user'], vendedor = self.kargs['user'], numero = base_models.Sequence().get_sequence('caixa')).put()
         else:
             caixa = caixa[0]['id']
         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 Nota de Entrega', documento = 'entrega', num_doc = self.kargs['numero'], valor_documento = to_decimal(bottle.request.forms.get('total_a_pagar')), terceiro = self.kargs['cliente'], metodo = metodo[0], entrada = bottle.request.forms.get(metodo[1]), saida = 0, user = self.kargs['user']).put()
         #print ('1.3')
         troco = total_entregue - to_decimal(bottle.request.forms.get('total_a_pagar'))
         if troco > to_decimal(0):
             linha_caixa = LinhaCaixa(caixa = caixa, descricao = 'Nossa nota de Entrega', documento = 'entrega', num_doc = self.kargs['numero'], valor_documento = to_decimal(bottle.request.forms.get('total_a_pagar')), terceiro = self.kargs['cliente'], metodo = default_metodo[0], entrada = 0, saida = troco, user = self.kargs['user']).put()
         else:
             troco = to_decimal(0)
         #print ('2')
         self.kargs['residual'] = to_decimal(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
         try:
             from my_diario import Diario
         except:
             from diario import Diario
         diario = Diario(where = "tipo='caixa'").get()[0]['id']
         periodo = None
         try:
             from my_periodo import Periodo
         except:
             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(self.kargs['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')
         try:
             from my_movimento import Movimento
         except:
             from movimento import Movimento
         try:
             from my_linha_movimento import LinhaMovimento
         except:
             from linha_movimento import LinhaMovimento
         movimento = Movimento(data = datetime.date.today(), numero = base_models.Sequence().get_sequence('movimento'), num_doc = self.kargs['numero'], descricao = 'Pagamento de Nota de Entrega', diario = diario, documento = 'entrega', periodo = periodo, estado = 'Rascunho', user = self.kargs['user']).put()
         try:
             from my_terceiro import Terceiro
         except:
             from terceiro import Terceiro
         conta_cliente = Terceiro().get(key = self.kargs['cliente'])[0]['a_receber']
         for metodo in metodos_pagamento:
             if bottle.request.forms.get(metodo[1]):
                 method = to_decimal(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 Nota de Entrega', conta = conta_pagamento, quant_debito = to_decimal(0), debito = to_decimal(bottle.request.forms.get(metodo[1])), quant_credito = to_decimal(0), credito = to_decimal(0), user = self.kargs['user']).put()
                 LinhaMovimento(movimento = movimento, descricao = 'Pagamento de Nota de Entrega', conta = conta_cliente, quant_debito = to_decimal(0), debito = to_decimal(0), quant_credito = to_decimal(0), credito = to_decimal(bottle.request.forms.get(metodo[1])), user = self.kargs['user']).put()
         self.put()
         ctx_dict = get_context(window_id)
         ctx_dict['main_key'] = self.kargs['id']
         ctx_dict['model_name'] = self.__model_name__
         set_context(window_id, ctx_dict)
         #print ('fim do efectuar pagamento')
         return form_edit(window_id = window_id).show()
     else:
         return 'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!'
示例#22
0
    def Confirmar(self, key, window_id):
        """Gera movimento contabilistico (conta de receitas contra conta de terceiros)"""
        self.kargs = get_model_record(model=self, key=key)
        self.kargs['estado'] = 'Confirmado'
        if not self.kargs['numero']:
            self.kargs['numero'] = base_models.Sequence().get_sequence(
                'factura_forn')
        try:
            from my_diario import Diario
        except:
            from diario import Diario
        diario = Diario().get_diario(diario='compras')
        try:
            from my_periodo import Periodo
        except:
            from periodo import Periodo
        periodo = Periodo().get_periodo(data=self.kargs['data'])
        #Valida se o cliente é sujeito a iva
        try:
            from my_terceiro import Terceiro
        except:
            from terceiro import Terceiro
        terceiro = Terceiro().get(key=self.kargs['fornecedor'])[0]
        sujeito_iva = terceiro['sujeito_iva']
        conta_terceiro = terceiro['a_receber']
        try:
            from my_movimento import Movimento
        except:
            from movimento import Movimento

        movimento = Movimento(
            data=self.kargs['data'],
            numero=base_models.Sequence().get_sequence('movimento'),
            num_doc=self.kargs['numero'],
            descricao='Vossa Factura',
            diario=diario,
            documento='factura_forn',
            periodo=periodo,
            estado='Confirmado',
            user=self.kargs['user']).put()
        #self.kargs['movimento'] = movimento
        try:
            from my_linha_factura_forn import LinhaFacturaFornecedor
        except:
            from linha_factura_forn import LinhaFacturaFornecedor
        record_lines = LinhaFacturaFornecedor(
            where="factura_forn = '{factura}'".format(
                factura=self.kargs['id'])).get()
        if record_lines:
            try:
                from my_linha_movimento import LinhaMovimento
            except:
                from linha_movimento import LinhaMovimento
            try:
                from my_produto import Produto
            except:
                from produto import Produto
            try:
                from my_familia_produto import FamiliaProduto
            except:
                from familia_produto import FamiliaProduto
            for line in record_lines:
                # aqui depois considerar a contabilização do desconto
                quantidade = float(line['quantidade'])
                product = Produto().get(key=line['produto'])[0]
                contas = Produto().get_accounts(line['produto'])
                #print (contas)
                conta_gastos = contas['conta_gastos']
                if sujeito_iva:
                    taxa_iva = product['iva']
                else:
                    taxa_iva = to_decimal(0)
                descricao = product['nome']
                total_sem_iva = line['valor_total'] / (1 + taxa_iva)
                LinhaMovimento(movimento=movimento,
                               descricao=descricao,
                               conta=conta_terceiro,
                               quant_debito=quantidade,
                               debito=total_sem_iva,
                               quant_credito=to_decimal(0),
                               credito=to_decimal(0),
                               user=self.kargs['user']).put()
                LinhaMovimento(movimento=movimento,
                               descricao=descricao,
                               conta=conta_gastos,
                               quant_debito=to_decimal(0),
                               debito=to_decimal(0),
                               quant_credito=quantidade,
                               credito=total_sem_iva,
                               user=self.kargs['user']).put()
            self.put()
            ctx_dict = get_context(window_id)
            ctx_dict['main_key'] = self.kargs['id']
            set_context(window_id, ctx_dict)
            return form_edit(window_id=window_id).show()
        else:
            return error_message(
                'Não pode confirmar facturas sem linhas de factura! \n')
示例#23
0
 def get_default_cliente(self):
     default_cliente = 0
     for cliente in Terceiro().get_clientes():
         if cliente[1] == 'Clientes Gerais':
             return cliente[0]
示例#24
0
 def Cancelar(self, key, window_id):
     """
     Estorna movimento contabilistico
     extorna caso confirmada ou simplesmente cancela se em rascunho
     """
     self.kargs = get_model_record(model=self, key=key)
     self.kargs['estado'] = 'Cancelado'
     #print (self.kargs)
     try:
         from my_diario import Diario
     except:
         from diario import Diario
     diario = Diario().get_diario(diario='compras')
     try:
         from my_periodo import Periodo
     except:
         from periodo import Periodo
     periodo = Periodo().get_periodo(data=str(datetime.date.today()))
     #Valida se o cliente é sujeito a iva
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     terceiro = Terceiro().get(key=self.kargs['fornecedor'])[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     #Tanto no movimento como no stock eu poderei ter vários movimentos, por exemplo o movimento em si e a anulação, além disso teremos que ter reconciliação de movimentos.
     try:
         from my_movimento import Movimento
     except:
         from movimento import Movimento
     movimento = Movimento(
         data=datetime.date.today(),
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=self.kargs['numero'],
         descricao='Anulação de Vossa Factura',
         documento='factura_forn',
         diario=diario,
         periodo=periodo,
         estado='Confirmado',
         user=self.kargs['user']).put()
     #record['movimento'] = movimento
     try:
         from my_linha_factura_forn import LinhaFacturaFornecedor
     except:
         from linha_factura_forn import LinhaFacturaFornecedor
     record_lines = LinhaFacturaFornecedor(
         where="factura_forn = '{factura}'".format(
             factura=self.kargs['id'])).get()
     if record_lines:
         try:
             from my_linha_movimento import LinhaMovimento
         except:
             from linha_movimento import LinhaMovimento
         try:
             from my_produto import Produto
         except:
             from produto import Produto
         try:
             from my_familia_produto import FamiliaProduto
         except:
             from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             quantidade = to_decimal(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             contas = Produto().get_accounts(line['produto'])
             conta_gastos = contas['conta_gastos']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal(0)
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_gastos,
                            quant_debito=quantidade,
                            debito=total_sem_iva,
                            quant_credito=to_decimal(0),
                            credito=to_decimal(0),
                            user=self.kargs['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_terceiro,
                            quant_debito=to_decimal(0),
                            debito=to_decimal(0),
                            quant_credito=quantidade,
                            credito=total_sem_iva,
                            user=self.kargs['user']).put()
     self.put()
     ctx_dict = get_context(window_id)
     ctx_dict['main_key'] = self.kargs['id']
     set_context(window_id, ctx_dict)
     return form_edit(window_id=window_id).show()
示例#25
0
 def get_funcionarios(self):
     try:
         from my_terceiro import Terceiro
     except:
         from terceiro import Terceiro
     return Terceiro().get_funcionarios()
示例#26
0
    def gerarRecibosSubsidios(self, key):
        self.kargs = get_model_record(model=self, key=key,force_db=True)
        funcionarios=[]
        if self.kargs['para_todos']:                
            funcionarios = Terceiro(where="funcionario=True").get(order_by='nome')
        else:
            sql = """SELECT t.* FROM terceiro t                
            WHERE (t.active = True OR t.active IS NULL)                
            AND t.id IN (
                SELECT fs.terceiro FROM rh_funcionario_subsidio fs 
                WHERE (fs.active = True OR fs.active IS NULL)
                AND fs.rh_folha_salario = '{idSal}'
                )""".format(idSal=key)
            funcionarios = run_sql(sql)        

        for func in funcionarios:
            contrato = RHContratoFuncionario(where="terceiro='{id}'".format(id=func['id'])).get()             
            if contrato:
                contrato=contrato[0]
                content = {
                    'estado':'Rascunho',
                    'user':self.kargs['user'],
                    'rh_folha_salario':self.kargs['id'],
                    'terceiro':func['id'],                        
                    'periodo':self.kargs['periodo'],
                    'ano':self.kargs['ano']
                }
                idRecibo = RHReciboSalario(**content).put()                   
                
                linhas = []
                #SALARIO                   
                linhas.append({'nome':'Salário', 'valor':contrato['salario_base'],'rh_tipo_rendimento':None,'rh_tipo_desconto':None, 'origem':'salario','parte_trib':to_decimal(0)})                   
                #IUR
                if (contrato['tipo'] == 'dependente') & (contrato['vinculo'] in ('efectivo','a_termo')):
                    #calcular a nova base tributavel (salario e rendiementos 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)
                    linhas.append({'nome':'IUR', 'valor':-iur, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':None, 'origem':'iur','parte_trib':to_decimal(0)})
                elif (contrato['tipo'] == 'dependente') & (contrato['vinculo'] =='prestacao_servico'):
                    #calcular a nova base tributavel (salario e rendiementos tributaveis)
                    salario_bruto_iur = to_decimal(contrato['salario_base'])+to_decimal(self.get_total_rendimento_tributaveis(idFuncionario=func['id']))
                    iur = self.calcularIURprestadorServico(salario=salario_bruto_iur)
                    linhas.append({'nome':'IUR', 'valor':-iur, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':None, 'origem':'iur','parte_trib':to_decimal(0)})                        
                elif contrato['tipo'] == 'pensionista':
                    iur = self.calcularRetencaoPensionista(salario=contrato['salario_base'])
                    linhas.append({'nome':'IUR', 'valor':-iur, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':None, 'origem':'iur','parte_trib':to_decimal(0)})
                elif contrato['tipo'] == 'nao_residente':
                    iur = self.calcularIURnaoResidente(salario=contrato['salario_base'])                    
                    linhas.append({'nome':'IUR', 'valor':-iur, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':None, 'origem':'iur','parte_trib':to_decimal(0)})                     
                #SEGURANCA SOCIAL
                if (contrato['tipo'] == 'dependente') & (contrato['vinculo'] in ('efectivo','a_termo')):
                    salario_bruto_inps = to_decimal(contrato['salario_base'])+to_decimal(self.get_total_rendimento_Inps_subsidio(idFuncionario=func['id']))
                    inps = self.calcularDescontoInpsFuncionario(salario=salario_bruto_inps)
                    linhas.append({'nome':'Segurança Social', 'valor':-inps,'rh_tipo_rendimento':None,'rh_tipo_desconto':None, 'origem':'inps','parte_trib':to_decimal(0)})
                    ####
                    RHGastoSuportado(rh_recibo_salario=idRecibo, nome="INPS", valor=self.calcularDescontoInpsEntidade(salario=salario_bruto_inps), user=self.kargs['user']).put()
                #RENDIMENTOS
                rendimentos = RHRendimentoFuncionario(where="terceiro='{id}' AND em_subsidio = True".format(id=func['id'])).get()
                for line in rendimentos:
                    tipo = RHTipoRendimento(where="id='{tr}'".format(tr=line['rh_tipo_rendimento'])).get()                        
                    if tipo:
                        linhas.append({'nome':tipo[0]['nome'], 'valor':line['valor'], 'rh_tipo_rendimento':tipo[0]['id'], 'rh_tipo_desconto':None, 'origem':'rendimento','parte_trib':self.get_parteTributavel(tipo_rend=tipo[0]['id'], valor=line['valor'])})
                #OUTROS RENDIMENTOS
                outrosRendimentos = RHOutrosRendimentosFuncionario(where="terceiro='{id}' AND rh_folha_salario = '{folha}'".format(id=func['id'], folha=key)).get()
                for line in outrosRendimentos:
                    tipo = RHTipoRendimento(where="id='{tr}'".format(tr=line['rh_tipo_rendimento'])).get()                        
                    if tipo:
                        linhas.append({'nome':tipo[0]['nome'], 'valor':line['valor'], 'rh_tipo_rendimento':tipo[0]['id'], 'rh_tipo_desconto':None, 'origem':'rendimento','parte_trib':self.get_parteTributavel(tipo_rend=tipo[0]['id'], valor=line['valor'])})
                #DESCONTOS
                descontos = RHDescontoFuncionario(where="terceiro='{idTer}' AND em_subsidio=True".format(idTer=func['id'])).get()
                for line in descontos:
                    tipo = RHTipoDesconto(where="id='{tr}'".format(tr=line['rh_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, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'desconto','parte_trib':to_decimal(0)})
                            else:
                                valor = (contrato['salario_base']+self.get_total_rendimento_tributaveis_subsidio(idFuncionario=func['id']))*line['valor']/100
                                linhas.append({'nome':tipo['nome'], 'valor':-valor, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'desconto','parte_trib':to_decimal(0)})
                        else:
                            linhas.append({'nome':tipo['nome'], 'valor':-line['valor'], 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'desconto','parte_trib':to_decimal(0)})
                #OUTROS DESCONTOS
                outrosDescontos = RHOutrosDescontosFuncionario(where="terceiro='{idTer}' AND rh_folha_salario='{idSal}'".format(idTer=func['id'], idSal=key)).get()
                for line in outrosDescontos:
                    tipo = RHTipoDesconto(where="id='{tr}'".format(tr=line['rh_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, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'outros_descontos', 'parte_trib':to_decimal(0)})
                            else:
                                valor = (contrato['salario_base']+self.get_total_rendimento_tributaveis_subsidio(idFuncionario=func['id']))*line['valor']/100
                                linhas.append({'nome':tipo['nome'], 'valor':-valor, 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'outros_descontos', 'parte_trib':to_decimal(0)})
                        else:
                            linhas.append({'nome':tipo['nome'], 'valor':-line['valor'], 'rh_tipo_rendimento':None, 'rh_tipo_desconto':tipo['id'], 'origem':'outros_descontos', 'parte_trib':to_decimal(0)})
                for line in linhas:
                    content = {
                    'user':self.kargs['user'],
                    'rh_recibo_salario':idRecibo,
                    'nome':line['nome'],
                    'valor':line['valor'],
                    'rh_tipo_rendimento':line['rh_tipo_rendimento'],
                    'rh_tipo_desconto':line['rh_tipo_desconto'],
                    'origem':line['origem'],
                    'parte_trib':line['parte_trib']                  
                    }
                    RHLinhaReciboSalario(**content).put()