def Confirmar(self, key, window_id): # Gera movimento de Stock (entra no armazem por contrapartida de fornecedores) self.kargs = get_model_record(model=self, key=key) self.kargs['estado'] = 'Confirmado' self.kargs['numero'] = base_models.Sequence().get_sequence('entrada') 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(self.kargs['data'])) in lista_datas: periodo = p['id'] from armazem import Armazem armazem_fornecedor = Armazem(where="tipo='fornecedor'").get()[0]['id'] 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 Entrada', documento='entrada', periodo=periodo, estado='Confirmado', user=self.kargs['user']).put() from linha_entrada import LinhaEntrada record_lines = LinhaEntrada(where="entrada = '{entrada}'".format(entrada=self.kargs['id'])).get() if record_lines: from linha_stock import LinhaStock from produto import Produto for line in record_lines: quantidade = to_decimal(line['quantidade']) product = Produto().get(key=line['produto'])[0] descricao = product['nome'] LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=self.kargs['armazem'], quant_saida=to_decimal(0), quant_entrada=quantidade, user=self.kargs['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_fornecedor, quant_saida=quantidade, quant_entrada=to_decimal(0), 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 entradas sem linhas de Entrada! \n')
def Confirmar(self, key, window_id): #ainda não esta 100% ver com calma outro dia # Gera movimento contabilistico (conta de materias primas contra conta de gastos e entrada de produto acabado em armazem) # Gera movimento de Stock (sai materia prima do armazem por contrapartida de produto acabado) if key in ['None', None]: key = get_actions(action='save', key=None, model_name=model.__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('prato') from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message('não existe periodo definido para a data em questão! \n') from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] from movimento import Movimento movimento = Movimento(data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de Produção', diario=diario, documento='prato', periodo=periodo, estado='Confirmado', user=session['user'], active=False).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Produção', documento='prato', periodo=periodo, estado='Confirmado', user=session['user']).put() Prato(**record).put() from linha_prato import LinhaPrato record_lines = LinhaPrato(where="prato = '{prato}'".format(prato=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: # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(line['quantidade']) product = Produto().get(key=line['produto'])[0] conta_mercadorias = product['conta_mercadorias'] conta_gastos = product['conta_gastos'] taxa_iva = product['iva'] 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) #Aqui ver a contabilização LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal(0), credito=to_decimal(0), user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal(0), debito=to_decimal(0), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put() # o movimento é no armazem cozinha e sai materia-prima entra produto acabado LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_materia_prima, quant_saida=quantidade, quant_entrada=0.0, user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_produto, quant_saida=0.0, quant_entrada=quantidade, user=session['user']).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')
def Confirmar(self, key, window_id): """verificar se o campo contactos está preenchido, tem que ter um contacto do tipo consumo e outro facturação ou então um do tipo defeito, se sim muda o estado para confirmado e atribui-lhe um numero novo utilizando as sequencias!""" if key in ['None', None]: m_action = model_action(obj=self) m_action.save(key=None, internal=True) self.kargs = get_model_record(model=self, key=key) try: from my_contacto import Contacto except: from contacto import Contacto contactos = Contacto(where = "contrato = '{contrato_id}'".format(contrato_id=self.kargs['id'])).get() contacto_facturacao = False contacto_consumo = False if len(contactos) > 0: for contact in contactos: if contact['tipo'] == 'facturacao' or contact['tipo'] == 'defeito': contacto_facturacao = True if contact['tipo'] == 'consumo' or contact['tipo'] == 'defeito': contacto_consumo = True if contacto_facturacao and contacto_consumo: if not self.kargs['numero']: self.kargs['numero'] = base_models.Sequence().get_sequence('contrato') self.kargs['estado'] = 'Confirmado' self.put() return form_edit(window_id = window_id).show() else: return error_message('Não pode confirmar contratos sem Moradas de Facturação e Consumo ou então uma do Tipo "Por Defeito!"!')
def Confirmar(self, key, window_id): self.kargs = get_model_record(model=self, key=key) if not self.kargs['numero']: self.kargs['numero'] = base_models.Sequence().get_sequence('actividade_pn') self.kargs['estado'] = 'Confirmado' self.put() return form_edit(window_id=window_id).show()
def Confirmar(self, key, window_id): # Gera movimento de Stock (entra no armazem de entrada por contrapartida do de saida) #print('estou em confirmar na transferência') if key in ['None', None]: key = get_actions(action='save', key=None, model_name=model.__model_name__, internal=True) 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('transferencia') try: from my_periodo import Periodo except: from periodo import Periodo periodo = Periodo().get_periodo(data=self.kargs['data']) 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 Transferencia', documento='transferencia', periodo=periodo, estado='Confirmado', user=self.kargs['user']).put() try: from my_linha_transferencia import LinhaTransferencia except: from linha_transferencia import LinhaTransferencia record_lines = LinhaTransferencia(where="transferencia = '{transferencia}'".format(transferencia=self.kargs['id'])).get() if record_lines: try: from my_linha_stock import LinhaStock except: from linha_stock import LinhaStock try: from my_produto import Produto except: from produto import Produto for line in record_lines: quantidade = to_decimal(line['quantidade']) product = Produto().get(key=line['produto'])[0] descricao = product['nome'] LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=self.kargs['armazem_in'], quant_saida=to_decimal(0), quant_entrada=quantidade, user=self.kargs['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=self.kargs['armazem_out'], quant_saida=quantidade, quant_entrada=to_decimal(0), 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) #print('fim do confirmar de transferencia') return form_edit(window_id = window_id).show() else: return error_message('Não pode confirmar Transferencias sem linhas de Transferencia! \n')
def Confirmar(self, key, window_id): 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('stock') # periodo = self.kargs['periodo'] # p = Periodo().get(key=periodo)[1][0] # lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) # if str(format_date(record['data'])) not in lista_datas: # return error_message('O periodo escolhido não é válido! \n') 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): self.kargs = get_model_record(model=self, key=key, force_db=self.__force_db__) #periodo = record['periodo'] #p = Periodo().get(key=periodo)[0] #lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) #if str(format_date(record['data'])) not in lista_datas: # return error_message('O período escolhido não é válido! \n') if not self.kargs['numero']: self.kargs['numero'] = base_models.Sequence().get_sequence( 'movimento') self.kargs['estado'] = 'Confirmado' self.put() return form_edit(window_id=window_id).show()
def Fechar(self, key, window_id): #Fecha a caixa if key != 'None': self.kargs = get_model_record(model = self, key = key) if not self.kargs['numero']: self.kargs['numero'] = base_models.Sequence().get_sequence('caixa') if not self.kargs['data_final']: self.kargs['data_final'] = datetime.date.today() if not self.kargs['hora_final']: self.kargs['hora_final'] = time.strftime('%H:%M') self.kargs['estado'] = 'Fechada' 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): """ Alem de mudar de estado também ilimina todos os registos de linha de leitura sem leitura_actual se for estimativa pode emitir facturas sem consumo só com as taxas """ self.kargs = get_model_record(model=self, key=key) #estimativas podem ser a zero if self.kargs['tipo'] != 'estimativa': LinhaLeitura( where= """leitura={leitura} AND (leitura_actual = 0.0 OR leitura_actual IS NULL)""" .format(leitura=key)).delete() if not self.kargs['numero']: self.kargs['numero'] = base_models.Sequence().get_sequence( 'leitura') self.kargs['estado'] = 'Confirmado' self.put() return form_edit(window_id=window_id).show()
def Confirmar( self, key, window_id): #não tinha self nem key eu acrescentei mas não testei # Gera movimento contabilistico (conta de mercadorias contra conta de gastos) # Gera movimento de Stock (sai de armazem por contrapartida de cliente) #print ('Hello!!!') if key in ['None', None]: m_action = model_action(obj=self) m_action.save(key=None, internal=True) record_id = key #print ('model_get begin!') record = model.get(key=record_id)[0] #print (record) record['user'] = session['user'] record['estado'] = 'Confirmado' record['numero'] = base_models.Sequence().get_sequence('distribuicao') from diario import Diario diario = Diario(where="tipo='stock'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para o data em questão! \n') from armazem import Armazem armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id'] #Valida se o cliente é sujeito a iva from terceiro import Terceiro sujeito_iva = Terceiro( where="nome='Clientes Gerais'").get()[0]['sujeito_iva'] from movimento import Movimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() from stock import Stock stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Distribuição', documento='distribuicao', periodo=periodo, estado='Confirmado', user=session['user']).put() Distribuicao(**record).put() from linha_distribuicao import LinhaDistribuicao record_lines = LinhaDistribuicao( where="distribuicao = '{distribuicao}'".format( distribuicao=record['id'])).get() if record_lines: from linha_movimento import LinhaMovimento from linha_stock import LinhaStock from produto import Produto from familia_produto import FamiliaProduto for line in record_lines: # aqui depois considerar a contabilização do desconto # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado quantidade = to_decimal(line['quant_out']) - to_decimal( line['quant_in']) product = Produto().get(key=line['produto'])[0] contas = Produto().get_accounts(line['produto']) conta_mercadorias = contas['conta_mercadorias'] conta_gastos = contas['conta_gastos'] if sujeito_iva: taxa_iva = product['iva'] else: taxa_iva = to_decimal('0') armazem_vendas = None familia = FamiliaProduto().get(key=product['familia']) if familia: familia = familia[0] if familia['armazem_vendas']: armazem_vendas = familia['armazem_vendas'] descricao = product['nome'] total_sem_iva = line['valor_total'] / (1 + taxa_iva) LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_vendas, quant_saida=quantidade, quant_entrada=to_decimal('0'), user=session['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_cliente, quant_saida=to_decimal('0'), quant_entrada=quantidade, user=session['user']).put() #print ('See You!!!') return form_edit(key=key, window_id=window_id) else: return error_message( 'Não pode confirmar guias de Distribuição sem linhas de Distribuição! \n' )
def Cancelar(self, key, window_id): """ Estorna movimento contabilistico Estorna movimento de stock verifica se existe factura gerada e se ouver verifica o estado e depois extorna caso confirmada ou simplesmente cancela se em rascunho Estorna Pagamento""" self.kargs = get_model_record(model=self, key=key) self.kargs['estado'] = 'Cancelado' try: from my_movimento import Movimento except: from movimento import Movimento try: from my_linha_movimento import LinhaMovimento except: from linha_movimento import LinhaMovimento movimentos = Movimento(where="documento='entrega' and num_doc={num_doc}".format(num_doc=self.kargs['numero'])).get() if movimentos: for movimento in movimentos: new_movimento = {} new_movimento['user'] = self.kargs['user'] for key in movimento.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','numero','descricao']: new_movimento[key] = movimento[key] new_movimento['numero'] = base_models.Sequence().get_sequence('movimento') new_movimento['descricao'] = 'Anulação de ' + movimento['descricao'] new_movimento_id = Movimento(**new_movimento).put() linhas_movimento = LinhaMovimento(where="movimento='{movimento}'".format(movimento=movimento['id'])).get() for linhamovimento in linhas_movimento: new_linha_movimento = {} new_quant_debito = to_decimal('0') new_quant_credito = to_decimal('0') new_debito = to_decimal('0') new_credit = to_decimal('0') for key in linhamovimento.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','movimento']: if key == 'quant_debito': new_quant_credito = linhamovimento[key] elif key == 'quant_credito': new_quant_debito = linhamovimento[key] elif key == 'credito': new_debito = linhamovimento[key] elif key == 'debito': new_credito = linhamovimento[key] else: new_linha_movimento[key] = linhamovimento[key] new_linha_movimento['movimento'] = new_movimento_id new_linha_movimento['quant_debito'] = new_quant_debito new_linha_movimento['quant_credito'] = new_quant_credito new_linha_movimento['debito'] = new_debito new_linha_movimento['credito'] = new_credito new_linha_movimento['user'] = self.kargs['user'] LinhaMovimento(**new_linha_movimento).put() try: from my_stock import Stock except: from stock import Stock try: from my_linha_stock import LinhaStock except: from linha_stock import LinhaStock stocks = Stock(where="documento='entrega' and num_doc={num_doc} ".format(num_doc=self.kargs['numero'])).get() if stocks: for stock in stocks: new_stock = {} new_stock['user'] = self.kargs['user'] for key in stock.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','numero']: new_stock[key] = stock[key] new_stock['numero'] = base_models.Sequence().get_sequence('stock') new_stock['descricao'] = 'Anulação de ' + stock['descricao'] new_stock_id = Stock(**new_stock).put() linhas_stock = LinhaStock(where="stock='{stock}'".format(stock=stock['id'])).get() for linhastock in linhas_stock: new_linha_stock = {} new_quant_entrada = to_decimal('0') new_quant_saida = to_decimal('0') for key in linhastock.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','stock']: if key == 'quant_entrada': new_quant_saida = linhastock[key] elif key == 'quant_saida': new_quant_entrada = linhastock[key] else: new_linha_stock[key] = linhastock[key] new_linha_stock['stock'] = new_stock_id new_linha_stock['quant_entrada'] = new_quant_entrada new_linha_stock['quant_saida'] = new_quant_saida new_linha_stock['user'] = self.kargs['user'] LinhaStock(**new_linha_stock).put() try: from my_linha_caixa import LinhaCaixa except: from linha_caixa import LinhaCaixa linhascaixa = LinhaCaixa(where="documento='entrega' and num_doc={num_doc} ".format(num_doc=self.kargs['numero'])).get() if linhascaixa: for linhacaixa in linhascaixa: new_linha_caixa = {} new_entrada = to_decimal('0') new_saida = to_decimal('0') for key in linhacaixa.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change', 'descricao']: if key == 'entrada': new_saida = linhacaixa[key] elif key == 'saida': new_entrada = linhacaixa[key] else: new_linha_caixa[key] = linhacaixa[key] new_linha_caixa['descricao'] = 'Anulação de ' + linhacaixa['descricao'] new_linha_caixa['entrada'] = new_entrada new_linha_caixa['saida'] = new_saida new_linha_caixa['user'] = self.kargs['user'] LinhaCaixa(**new_linha_caixa).put() if self.kargs['factura']: try: from my_factura_cli import FacturaCliente except: from factura_cli import FacturaCliente #aqui depois validar se está confirmada e se estiver estornar o movimento contabilistico facturas_cli = FacturaCliente(where="id='{factura}' ".format(factura=self.kargs['factura'])).get() if facturas_cli: for factura_cli in facturas_cli: factura_cli['estado'] = 'Cancelado' factura_cli['user'] = self.kargs['user'] FacturaCliente(**factura_cli).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 # Estorna movimento de stock record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Cancelado' from movimento import Movimento from linha_movimento import LinhaMovimento movimentos = Movimento(where="documento='quebra'and num_doc={num_doc} ".format(num_doc=record['numero'])).get() if movimentos: for movimento in movimentos: new_movimento = {} new_movimento['user'] = session['user'] for key in movimento.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','numero','descricao']: new_movimento[key] = movimento[key] new_movimento['numero'] = base_models.Sequence().get_sequence('movimento') new_movimento['descricao'] = 'Anulação de ' + movimento['descricao'] new_movimento_id = Movimento(**new_movimento).put() linhas_movimento = LinhaMovimento(where="movimento={movimento}".format(movimento=movimento['id'])).get() for linhamovimento in linhas_movimento: new_linha_movimento = {} new_quant_debito = to_decimal(0) new_quant_credito = to_decimal(0) new_debito = to_decimal(0) new_credit = to_decimal(0) for key in linhamovimento.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','movimento']: if key == 'quant_debito': new_quant_credito = linhamovimento[key] elif key == 'quant_credito': new_quant_debito = linhamovimento[key] elif key == 'credito': new_debito = linhamovimento[key] elif key == 'debito': new_credito = linhamovimento[key] else: new_linha_movimento[key] = linhamovimento[key] new_linha_movimento['movimento'] = new_movimento_id new_linha_movimento['quant_debito'] = new_quant_debito new_linha_movimento['quant_credito'] = new_quant_credito new_linha_movimento['debito'] = new_debito new_linha_movimento['credito'] = new_credito new_linha_movimento['user'] = session['user'] LinhaMovimento(**new_linha_movimento).put() from stock import Stock from linha_stock import LinhaStock stocks = Stock(where="documento='quebra'and num_doc={num_doc} ".format(num_doc=record['numero'])).get() if stocks: for stock in stocks: new_stock = {} new_stock['user'] = session['user'] for key in stock.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','numero']: new_stock[key] = stock[key] new_stock['numero'] = base_models.Sequence().get_sequence('stock') new_stock['descricao'] = 'Anulação de ' + stock['descricao'] new_stock_id = Stock(**new_stock).put() linhas_stock = LinhaStock(where="stock={stock}".format(stock=stock['id'])).get() for linhastock in linhas_stock: new_linha_stock = {} new_quant_entrada = to_decimal(0) new_quant_saida = to_decimal(0) for key in linhastock.keys(): if key not in ['id', 'user_create', 'user_change', 'date_create', 'date_change','stock']: if key == 'quant_entrada': new_quant_saida = linhastock[key] elif key == 'quant_saida': new_quant_entrada = linhastock[key] else: new_linha_stock[key] = linhastock[key] new_linha_stock['stock'] = new_stock_id new_linha_stock['quant_entrada'] = new_quant_entrada new_linha_stock['quant_saida'] = new_quant_saida new_linha_stock['user'] = session['user'] LinhaStock(**new_linha_stock).put() Quebra(**record).put() return form_edit(key = 'None', window_id = window_id)
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')
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!'
def new_number(self): base_models.Sequence().get_sequence('ocorrencia')
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')
def Confirmar(self, key, window_id): # Gera movimento de Stock (movimenta o armazem escolhido por contrapartida de regularizacoes) 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( 'regularizacao') periodo = None try: from my_periodo import Periodo except: from periodo import Periodo periodo = Periodo().get_periodo(data=self.kargs['data']) 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 Regularização', documento='regularizacao', periodo=periodo, estado='Confirmado', user=self.kargs['user']).put() try: from my_linha_regularizacao import LinhaRegularizacao except: from linha_regularizacao import LinhaRegularizacao record_lines = LinhaRegularizacao( where="regularizacao = '{regularizacao}'".format( regularizacao=self.kargs['id'])).get() if record_lines: try: from my_armazem import Armazem except: from armazem import Armazem armazem_regularizacao = Armazem( where="tipo='regularizacoes'").get()[0]['id'] try: from my_linha_stock import LinhaStock except: from linha_stock import LinhaStock try: from my_produto import Produto except: from produto import Produto for line in record_lines: product = Produto().get(key=line['produto'])[0] descricao = product['nome'] quantidade = to_decimal(line['diferenca']) if quantidade < 0: armazem_in = armazem_regularizacao armazem_out = self.kargs['armazem'] quantidade = -quantidade else: armazem_in = self.kargs['armazem'] armazem_out = armazem_regularizacao LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_in, quant_saida=0.0, quant_entrada=quantidade, user=self.kargs['user']).put() LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_out, quant_saida=quantidade, quant_entrada=0.0, 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 Regularizações sem linhas de Regularização! \n' )
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 efectuar_pagamento(self, key, window_id): """Esta acção efectua o pagamento""" active = False record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Pago' from terceiro import Terceiro terceiro = Terceiro(where="nome='Clientes Gerais'").get()[0] cliente = terceiro['id'] conta_cliente = terceiro['a_receber'] #Verifica se tem caixa aberta, se não tiver abre #Faz o pagamento em caixa from caixa import Caixa from linha_caixa import LinhaCaixa from terminal import Terminal terminal = Terminal(where="""name='Distribuicao'""").get( ) # substituir esta bosta para get_terminal if len(terminal) > 0: terminal = terminal[0]['id'] caixa = Caixa( where= "estado = 'Aberta' AND terminal='{terminal}' AND data_inicial <= '{today}'" .format(terminal=terminal, today=record['data'])).get() if not caixa: caixa = Caixa(data_inicial=record['data'], hora_inicial=time.strftime('%H:%M:%S'), valor_inicial=0, valor_final=0, estado='Aberta', user=session['user'], vendedor=session['user'], terminal=terminal).put() else: caixa = caixa[0]['id'] from metodo_pagamento import MetodoPagamento metodos_pagamento = MetodoPagamento().get_options() first = True total_entregue = to_decimal('0') for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal(str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): total_entregue += to_decimal( str(bottle.request.forms.get(metodo[1]))) if total_entregue >= to_decimal( str(bottle.request.forms.get('total_a_pagar'))): for metodo in metodos_pagamento: if first == True: default_metodo = metodo first = False if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=metodo[0], entrada=bottle.request.forms.get(metodo[1]), saida=0, active=active, user=session['user']).put() troco = total_entregue - to_decimal( str(bottle.request.forms.get('total_a_pagar'))) if troco > to_decimal('0'): linha_caixa = LinhaCaixa( caixa=caixa, descricao='Nossa Guia de Distribuição', documento='distribuicao', num_doc=record['numero'], valor_documento=to_decimal( str(bottle.request.forms.get('total_a_pagar'))), terceiro=cliente, metodo=default_metodo[0], entrada=0, saida=troco, active=active, user=session['user']).put() else: troco = to_decimal('0') record['residual'] = to_decimal( str(bottle.request.forms.get( 'total_a_pagar'))) - total_entregue + troco #Faz o lançamento contabilistico se tiver factura como movimento activo, se não como movimento geral #Vê o metodo de pagamento e lança na conta adequada from diario import Diario diario = Diario(where="tipo='caixa'").get()[0]['id'] periodo = None from periodo import Periodo periodos = Periodo().get() for p in periodos: lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final']) if str(format_date(record['data'])) in lista_datas: periodo = p['id'] if not periodo: return error_message( 'não existe periodo definido para a data em questão! \n') from movimento import Movimento from linha_movimento import LinhaMovimento movimento = Movimento( data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Pagamento de Guia de Distribuição', diario=diario, documento='distribuicao', periodo=periodo, estado='Rascunho', user=session['user'], active=active).put() #print (record) Distribuicao(**record).put() for metodo in metodos_pagamento: if bottle.request.forms.get(metodo[1]): method = to_decimal( str(bottle.request.forms.get(metodo[1]))) else: method = to_decimal('0') if method > to_decimal('0'): conta_pagamento = MetodoPagamento().get( key=metodo[0])[0]['conta'] LinhaMovimento(movimento=movimento, descricao='Pagamento de Talão de Venda', conta=conta_pagamento, quant_debito=to_decimal('0'), debito=to_decimal( str(bottle.request.forms.get( metodo[1]))), quant_credito=to_decimal('0'), credito=to_decimal('0'), user=session['user']).put() LinhaMovimento( movimento=movimento, descricao='Pagamento de Guia de Distribuição', conta=conta_cliente, quant_debito=to_decimal('0'), debito=to_decimal('0'), quant_credito=to_decimal('0'), credito=to_decimal( str(bottle.request.forms.get(metodo[1]))), user=session['user']).put() return form_edit(key='None', window_id=self.window_id) else: return error_message( 'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!' ) #depois ver a possibilidade de ficar no mesmo sitio
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')
def Cancelar(self, key, window_id): # Estorna movimento contabilistico # Estorna movimento de stock self.kargs = get_model_record(model=self, key=key) self.kargs['estado'] = 'Cancelado' try: from my_movimento import Movimento except: from movimento import Movimento try: from my_linha_movimento import LinhaMovimento except: from linha_movimento import LinhaMovimento movimentos = Movimento( where="documento='regularizacao' and num_doc={num_doc} ".format( num_doc=self.kargs['numero'])).get() if movimentos: for movimento in movimentos: new_movimento = {} new_movimento['user'] = self.kargs['user'] for key in movimento.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'numero', 'descricao' ]: new_movimento[key] = movimento[key] new_movimento['numero'] = base_models.Sequence().get_sequence( 'movimento') new_movimento[ 'descricao'] = 'Anulação de ' + movimento['descricao'] new_movimento_id = Movimento(**new_movimento).put() linhas_movimento = LinhaMovimento( where="movimento='{movimento}'".format( movimento=movimento['id'])).get() for linhamovimento in linhas_movimento: new_linha_movimento = {} new_quant_debito = to_decimal(0) new_quant_credito = to_decimal(0) new_debito = to_decimal(0) new_credit = to_decimal(0) for key in linhamovimento.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'movimento' ]: if key == 'quant_debito': new_quant_credito = linhamovimento[key] elif key == 'quant_credito': new_quant_debito = linhamovimento[key] elif key == 'credito': new_debito = linhamovimento[key] elif key == 'debito': new_credito = linhamovimento[key] else: new_linha_movimento[key] = linhamovimento[key] new_linha_movimento['movimento'] = new_movimento_id new_linha_movimento['quant_debito'] = new_quant_debito new_linha_movimento['quant_credito'] = new_quant_credito new_linha_movimento['debito'] = new_debito new_linha_movimento['credito'] = new_credito new_linha_movimento['user'] = self.kargs['user'] LinhaMovimento(**new_linha_movimento).put() try: from my_stock import Stock except: from stock import Stock try: from my_linha_stock import LinhaStock except: from linha_stock import LinhaStock stocks = Stock( where="documento='regularizacao' and num_doc={num_doc} ".format( num_doc=self.kargs['numero'])).get() if stocks: for stock in stocks: new_stock = {} new_stock['user'] = self.kargs['user'] for key in stock.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'numero' ]: new_stock[key] = stock[key] new_stock['numero'] = base_models.Sequence().get_sequence( 'stock') new_stock['descricao'] = 'Anulação de ' + stock['descricao'] new_stock_id = Stock(**new_stock).put() linhas_stock = LinhaStock(where="stock={stock}".format( stock=stock['id'])).get() for linhastock in linhas_stock: new_linha_stock = {} new_quant_entrada = to_decimal(0) new_quant_saida = to_decimal(0) for key in linhastock.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'stock' ]: if key == 'quant_entrada': new_quant_saida = linhastock[key] elif key == 'quant_saida': new_quant_entrada = linhastock[key] else: new_linha_stock[key] = linhastock[key] new_linha_stock['stock'] = new_stock_id new_linha_stock['quant_entrada'] = new_quant_entrada new_linha_stock['quant_saida'] = new_quant_saida new_linha_stock['user'] = self.kargs['user'] LinhaStock(**new_linha_stock).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' #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()
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')
def Cancelar(self, key, window_id): # Estorna movimento contabilistico # Estorna movimento de stock # verifica se existe factura gerada e se ouver verifica o estado e depois extorna caso confirmada ou simplesmente cancela se em rascunho # Estorna Pagamento record_id = key record = model.get(key=record_id)[0] record['user'] = session['user'] record['estado'] = 'Cancelado' from movimento import Movimento from linha_movimento import LinhaMovimento movimentos = Movimento( where="documento='distribuicao'and num_doc={num_doc} ".format( num_doc=record['numero'])).get() if movimentos: for movimento in movimentos: new_movimento = {} new_movimento['user'] = session['user'] for key in movimento.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'numero', 'descricao' ]: new_movimento[key] = movimento[key] new_movimento['numero'] = base_models.Sequence().get_sequence( 'movimento') new_movimento[ 'descricao'] = 'Anulação de ' + movimento['descricao'] new_movimento_id = Movimento(**new_movimento).put() linhas_movimento = LinhaMovimento( where="movimento='{movimento}'".format( movimento=movimento['id'])).get() for linhamovimento in linhas_movimento: new_linha_movimento = {} new_quant_debito = to_decimal('0') new_quant_credito = to_decimal('0') new_debito = to_decimal('0') new_credit = to_decimal('0') for key in linhamovimento.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'movimento' ]: if key == 'quant_debito': new_quant_credito = linhamovimento[key] elif key == 'quant_credito': new_quant_debito = linhamovimento[key] elif key == 'credito': new_debito = linhamovimento[key] elif key == 'debito': new_credito = linhamovimento[key] else: new_linha_movimento[key] = linhamovimento[key] new_linha_movimento['movimento'] = new_movimento_id new_linha_movimento['quant_debito'] = new_quant_debito new_linha_movimento['quant_credito'] = new_quant_credito new_linha_movimento['debito'] = new_debito new_linha_movimento['credito'] = new_credito new_linha_movimento['user'] = session['user'] LinhaMovimento(**new_linha_movimento).put() from stock import Stock from linha_stock import LinhaStock stocks = Stock( where="documento='distribuicao'and num_doc={num_doc} ".format( num_doc=record['numero'])).get() if stocks: for stock in stocks: new_stock = {} new_stock['user'] = session['user'] for key in stock.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'numero' ]: new_stock[key] = stock[key] new_stock['numero'] = base_models.Sequence().get_sequence( 'stock') new_stock['descricao'] = 'Anulação de ' + stock['descricao'] new_stock_id = Stock(**new_stock).put() linhas_stock = LinhaStock(where="stock={stock}".format( stock=stock['id'])).get() for linhastock in linhas_stock: new_linha_stock = {} new_quant_entrada = to_decimal('0') new_quant_saida = to_decimal('0') for key in linhastock.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'stock' ]: if key == 'quant_entrada': new_quant_saida = linhastock[key] elif key == 'quant_saida': new_quant_entrada = linhastock[key] else: new_linha_stock[key] = linhastock[key] new_linha_stock['stock'] = new_stock_id new_linha_stock['quant_entrada'] = new_quant_entrada new_linha_stock['quant_saida'] = new_quant_saida new_linha_stock['user'] = session['user'] LinhaStock(**new_linha_stock).put() from linha_caixa import LinhaCaixa linhascaixa = LinhaCaixa( where="documento='distribuicao'and num_doc={num_doc} ".format( num_doc=record['numero'])).get() if linhascaixa: for linhacaixa in linhascaixa: new_linha_caixa = {} new_entrada = to_decimal('0') new_saida = to_decimal('0') for key in linhacaixa.keys(): if key not in [ 'id', 'user_create', 'user_change', 'date_create', 'date_change', 'descricao' ]: if key == 'entrada': new_saida = linhacaixa[key] elif key == 'saida': new_entrada = linhacaixa[key] else: new_linha_caixa[key] = linhacaixa[key] new_linha_caixa[ 'descricao'] = 'Anulação de ' + linhacaixa['descricao'] new_linha_caixa['entrada'] = new_entrada new_linha_caixa['saida'] = new_saida new_linha_caixa['user'] = session['user'] LinhaCaixa(**new_linha_caixa).put() Distribuicao(**record).put() return form_edit(key='None', window_id=window_id)
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 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)
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()