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 get_stock(self, key): # aqui o stock deve calcular todos os produtos e depois enviar um dicionario com todos os produtos de uma vez #print('estou em get_stock') from linha_stock import LinhaStock entradas = to_decimal(0) saidas = to_decimal(0) record_lines = LinhaStock(where="produto = '{produto}'".format( produto=key)).get() #print('record_lines', record_lines) from armazem import Armazem armazens = Armazem(where="tipo in ('fisico')").get() #print('armazens', armazens) ids_armazem = [] for armazem in armazens: ids_armazem.append(armazem['id']) #print('ids_armazem', ids_armazem) if record_lines: for line in record_lines: if line['armazem'] in ids_armazem: #se for de armazem cliente ou fornecedor não conta aqui entradas += to_decimal(line['quant_entrada']) saidas += to_decimal(line['quant_saida']) value = entradas - saidas return round(value, 0)
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 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 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) #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')