def get_results(): try: from my_linha_factura_cli import LinhaFacturaCliente except: from linha_factura_cli import LinhaFacturaCliente record_lines = LinhaFacturaCliente(where="factura_cli = '{factura}'".format(factura=key)).get() return record_lines
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()
def Gera_Facturas(self, key, window_id): """ Gera uma factura por cada linha de leitura """ try: from my_factura_cli import FacturaCliente except: from factura_cli import FacturaCliente try: from my_linha_factura_cli import LinhaFacturaCliente except: from linha_factura_cli import LinhaFacturaCliente try: from my_produto import Produto except: from produto import Produto self.kargs = get_model_record(model=self, key=key) sql = """ SELECT terceiro.id AS cliente, contador_contrato.contador AS contador, contrato.tipo AS tipo_contrato FROM terceiro JOIN contrato ON contrato.cliente = terceiro.id JOIN contador_contrato ON contador_contrato.contrato = contrato.id WHERE contador_contrato.estado = 'activo' """ lista_clientes = run_sql(sql) clientes = {} tipos_contrato = {} for c in lista_clientes: clientes[c['contador']] = c['cliente'] tipos_contrato[c['contador']] = c['tipo_contrato'] sql = """ SELECT * from produto where nome in ('Impresso', 'Taxa de Manutenção', 'Água Canalizada') """ lista_produtos = run_sql(sql) produtos = {} for p in lista_produtos: produtos[p['nome']] = { 'id': p['id'], 'unidade': p['unidade_medida_venda'], 'iva': p['iva'], 'preco_venda': p['preco_venda'] } linhas_leitura = LinhaLeitura(where="""leitura={leitura}""".format( leitura=key)).get()[1] for linha in linhas_leitura: sql = """ SELECT max(linha_leitura.leitura_actual) as leitura_actual FROM linha_leitura JOIN leitura ON leitura.id = linha_leitura.leitura WHERE leitura.data < (SELECT data FROM leitura WHERE id = '{leitura}') AND leitura.zona = (SELECT zona FROM leitura WHERE id = '{leitura}') AND linha_leitura.contador = {contador}""".format( leitura=linha['leitura'], contador=linha['contador']) leitura_anterior = run_sql(sql) if leitura_anterior and leitura_anterior[0][ 'leitura_actual'] != None: leitura_anterior = leitura_anterior[0]['leitura_actual'] else: leitura_anterior = 0 prod1 = produtos['Impresso'] prod2 = produtos['Taxa de Manutenção'] #aqui nos termos da politica de escalões devo cobrar o correspondente a cada escalao #ou seja: #4 M3 a 220, 4 a 250 3 o resto a 350 prod3 = produtos['Água Canalizada'] tipo = tipos_contrato[linha['contador']] quantidade = linha['leitura_actual'] - leitura_anterior precos = Produto().get_sale_prices_escaloes( produto=prod3['id'], quantidade=quantidade, unidade=prod3['unidade'], categoria=tipo, terminal=get_terminal(bottle.request.session['terminal'])) #print (precos) residual = to_decimal(prod1['preco_venda']) + to_decimal( prod2['preco_venda']) for preco in precos: residual += to_decimal(precos[preco][0]) * to_decimal( precos[preco][1]) numero_factura = base_models.Sequence().get_sequence('factura_cli') factura = FacturaCliente(estado='Rascunho', residual=residual, user=self.kargs['user'], data=self.kargs['data'], numero=numero_factura, cliente=clientes[linha['contador']], zona=self.kargs['zona'], leitura=self.kargs['id'], vendedor=self.kargs['user'], contador=linha['contador'], leitura_actual=linha['leitura_actual'], leitura_anterior=leitura_anterior).put() # aqui depois modificar o produto para que eu diga que produtos facturar, por enquanto fica hardcoded LinhaFacturaCliente(factura_cli=factura, produto=prod1['id'], descricao='', quantidade=1, unidade=prod1['unidade'], valor_unitario=prod1['preco_venda'], desconto=0, iva=prod1['iva'], valor_total=prod1['preco_venda'], user=self.kargs['user']).put() LinhaFacturaCliente(factura_cli=factura, produto=prod2['id'], descricao='', quantidade=1, unidade=prod2['unidade'], valor_unitario=prod2['preco_venda'], desconto=0, iva=prod2['iva'], valor_total=prod2['preco_venda'], user=self.kargs['user']).put() for preco in precos: total = to_decimal(precos[preco][0]) * to_decimal( precos[preco][1]) LinhaFacturaCliente(factura_cli=factura, produto=prod3['id'], descricao=preco, quantidade=to_decimal(precos[preco][0]), unidade=prod3['unidade'], valor_unitario=to_decimal( precos[preco][1]), desconto=0, iva=prod3['iva'], valor_total=total, user=self.kargs['user']).put() LinhaLeitura(factura=factura, user=self.kargs['user'], id=linha['id']).put() self.kargs['estado'] = 'Facturado' self.put() return form_edit(window_id=window_id).show()
def get_informacao_cliente(self, key): self.kargs = get_model_record(model=self, key=key) if self.kargs['cli'] == '1': facturas = FacturaCliente( 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\n\n..................", facturas, "......................\n\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 = XMLAnexoClienteDPR(**content).put() for factura in facturas: print(factura) terceiro = Terceiro(where="id='{id}'".format( id=factura['cliente'])).get() if terceiro: terceiro = terceiro[0] linhas = LinhaFacturaCliente( where="factura_cli='{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_cliente_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'] } XMLLinhaAnexoClienteDPR(**content).put()
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()
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' 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=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['cliente'])[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 Nossa Factura', documento='factura_cli', diario=diario, periodo=periodo, estado='Confirmado', user=self.kargs['user']).put() #record['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']) conta_receitas = contas['conta_receitas'] 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_receitas, 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()
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
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['user'] record['estado'] = 'Facturado' try: from my_factura_cli import FacturaCliente except: from factura_cli import FacturaCliente factura = FacturaCliente(data=record['data'], notas=record['notas'], talao_bar=record['id'], cliente=record['cliente'], residual=str(to_decimal('0')), estado='rascunho', user=session['user']).put() record['factura'] = factura TalaoBar(**record).put() #Muda o movimento de não active para active try: from my_movimento import Movimento except: from movimento import Movimento movimentos = Movimento( where="documento='talao_bar'and num_doc={num_doc} ".format( num_doc=record['id'])).get() if movimentos: for movimento in movimentos: movimento['active'] = 'True' movimento['user'] = session['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='{cliente}'".format( cliente=str(record['cliente']))).get()[1][0]['sujeito_iva'] try: from my_linha_talao_bar import LinhaTalaoBar except: from linha_talao_bar import LinhaTalaoBar record_lines = LinhaTalaoBar(where="talao_bar = '{talao_bar}'".format( talao_bar=record['id'])).get() if record_lines: try: from my_linha_factura_cli import LinhaFacturaCliente except: 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['user']).put() return form_edit(key=key, window_id=window_id)