def clientes(self): db = con.Conexao() sist = db.sistema() coding = sys.stdout.encoding #arq = open('C:\home\programas\lazarus\pdv\pdv\log_cliente.log', 'w') #import pudb;pu.db #order = odoo.env['pos.order'] hj = datetime.now() hj = hj - timedelta(days=1220) hj = datetime.strftime(hj, '%Y-%m-%d %H:%M:%S') cliente = sist.env['res.partner'] #if cliente_id == 0: cli_ids = cliente.search([('create_date', '>=', hj), ('customer', '=', True)]) #else: # cli_ids = cliente_id print('Importando Clientes') for partner_id in cliente.browse(cli_ids): #log = 'Cliente novos : %s\n' %(partner_id.name) #print (log) #arq.write(log) sqlc = 'select codcliente from clientes where codcliente = %s' % ( partner_id.id) cli = db.query(sqlc) nome = partner_id.name if partner_id.legal_name: razao = partner_id.legal_name else: razao = nome """ nome = self.asciize(partner_id.name.encode(coding)) if partner_id.legal_name: razao = self.asciize(partner_id.legal_name.encode(coding)) else: razao = nome print(partner_id.name) try: print(nome.decode()) except: nome = partner_id.name.encode('ascii', 'ignore') """ if not len(cli): log = 'Cadastrando Cliente : %s\n' % (nome) #arq.write(log) print(log) tipo = '0' if partner_id.is_company: tipo = '1' vendedor = '1' if partner_id.user_id.id: vendedor = str(partner_id.user_id.id) ie = '' if partner_id.inscr_est: ie = partner_id.inscr_est fiscal = 'J' #if partner_id.property_account_position: # fiscal = partner_id.property_account_position.note #nome = partner_id.name.encode('ascii', 'ignore') regiao = '0' if partner_id.curso: regiao = '1' insere = 'insert into clientes (\ CODCLIENTE, NOMECLIENTE, RAZAOSOCIAL,\ TIPOFIRMA,CNPJ, INSCESTADUAL,\ SEGMENTO, REGIAO, LIMITECREDITO,\ DATACADASTRO, CODUSUARIO, STATUS, CODBANCO, CODFISCAL)\ values (%s, \'%s\', \'%s\',\ %s, \'%s\',\'%s\',\ %s, %s, %s,\ %s, %s, %s, %s, \'%s\')'\ %(str(partner_id.id), nome, razao, \ tipo, partner_id.cnpj_cpf, ie,\ '1', regiao, '0.0',\ 'current_date', vendedor, '1', '1', fiscal) db.insert(insere) fone = 'Null' ddd = 'Null' if partner_id.phone: fone = '''%s''' % (partner_id.phone[4:]) ddd = '''%s''' % (partner_id.phone[1:3]) fone1 = 'Null' ddd1 = 'Null' if partner_id.mobile: fone1 = '''%s''' % (partner_id.mobile[4:]) ddd1 = partner_id.mobile[1:3] fone2 = 'Null' ddd2 = 'Null' if partner_id.fax: fone2 = partner_id.fax[4:] ddd2 = partner_id.fax[1:3] #buscar Cidade/UF/Pais cidade = 'Null' ibge = 'Null' uf = 'Null' pais = 'Null' if partner_id.city_id: cidade = partner_id.city_id.name[:39] if partner_id.city_id.ibge_code: ibge = '%s%s-%s' %(partner_id.city_id.state_id.ibge_code, \ partner_id.city_id.ibge_code[:4], \ partner_id.city_id.ibge_code[4:]) uf = partner_id.city_id.state_id.code pais = partner_id.city_id.state_id.country_id.name endereco = 'Null' if partner_id.street: endereco = partner_id.street[:49] bairro = 'Null' if partner_id.district: bairro = partner_id.district[:29] complemento = 'Null' if partner_id.street2: complemento = partner_id.street2[:29] cep = 'Null' if partner_id.zip: cep = '%s-%s' %(partner_id.zip[:5], \ partner_id.zip[5:]) cep = cep[:10] email = 'Null' if partner_id.email: email = partner_id.email[:255] obs = 'Null' if partner_id.comment: obs = partner_id.comment[:199] numero = 'Null' if partner_id.number: numero = partner_id.number[:5] inserir = 'INSERT INTO ENDERECOCLIENTE (CODENDERECO, \ CODCLIENTE, LOGRADOURO, BAIRRO, COMPLEMENTO,\ CIDADE, UF, CEP, TELEFONE, TELEFONE1, TELEFONE2,\ E_MAIL, TIPOEND,\ DADOSADICIONAIS, DDD, DDD1, DDD2,\ NUMERO, CD_IBGE, PAIS) VALUES (' inserir += str(partner_id.id) inserir += ',' + str(partner_id.id) if endereco != 'Null': #inserir += ', \'%s\'' %(str(endereco.encode('ascii', 'ignore'))) inserir += ', \'%s\'' % (endereco) else: inserir += ', Null' if bairro != 'Null': #inserir += ', \'%s\'' % (str(bairro.encode('ascii', 'ignore'))) inserir += ', \'%s\'' % (bairro) else: inserir += ', Null' if complemento != 'Null': #inserir += ', \'%s\'' % (str(complemento.encode('ascii', 'ignore'))) inserir += ', \'%s\'' % (complemento) else: inserir += ', Null' if cidade != 'Null': #inserir += ', \'%s\'' % (str(cidade.encode('ascii', 'ignore'))) inserir += ', \'%s\'' % (cidade) else: inserir += ', Null' if uf != 'Null': inserir += ', \'%s\'' % (str(uf)) else: inserir += ', Null' if cep != 'Null': inserir += ', \'%s\'' % (cep) else: inserir += ', Null' if fone != 'Null': inserir += ', \'%s\'' % (fone) else: inserir += ', Null' if fone1 != 'Null': inserir += ', \'%s\'' % (fone1) else: inserir += ', Null' if fone2 != 'Null': inserir += ', \'%s\'' % (fone2) else: inserir += ', Null' if email != 'Null': inserir += ', \'%s\'' % (email) else: inserir += ', Null' inserir += ', 0' # tipoEnd if obs != 'Null': #inserir += ', \'%s\'' % (str(obs.encode('ascii', 'ignore'))) inserir += ', \'%s\'' % (obs) else: inserir += ', Null' if ddd != 'Null': inserir += ', \'%s\'' % (ddd) else: inserir += ', Null' if ddd1 != 'Null': inserir += ', \'%s\'' % (ddd1) else: inserir += ', Null' if ddd2 != 'Null': inserir += ', \'%s\'' % (ddd2) else: inserir += ', Null' if numero != 'Null': inserir += ', \'%s\'' % (numero) else: inserir += ', Null' if ibge != 'Null': inserir += ', \'%s\'' % (ibge) else: inserir += ', Null' if pais != 'Null': inserir += ', \'%s\');' % (pais) else: inserir += ', Null);' print(partner_id.street) db.insert(inserir) else: regiao = '0' if partner_id.curso: regiao = '1' altera = 'UPDATE CLIENTES SET REGIAO = %s \ ,NOMECLIENTE = \'%s\' \ WHERE CODCLIENTE = %s' % (regiao, nome, str(partner_id.id)) db.insert(altera) arq.close()
def order(self): #import pdb; pdb.set_trace() db = con.Conexao() sist = db.sistema() #arq = open('C:\home\programas\lazarus\pdv\pdv\log_pedido.log', 'w') #order = odoo.env['pos.order'] hj = datetime.now() hj = hj - timedelta(days=2) hj = datetime.strftime(hj, '%m-%d-%Y') caixa_usado = 'None' sqld = 'SELECT m.CODMOVIMENTO, m.DATAMOVIMENTO, ' \ 'm.CODCLIENTE, m.STATUS, m.CODUSUARIO, m.CODVENDEDOR, ' \ 'm.CODALMOXARIFADO, DATEADD(3 hour to m.DATA_SISTEMA) ' \ ' FROM MOVIMENTO m ' \ ' WHERE STATUS = 1 ' \ ' AND DataMovimento > \'%s\'' %(hj) movs = db.query(sqld) print('Importando Pedidos .....') if not len(movs): print('Sem Pedidos para importar.') print('') for mvs in movs: #log = #arq.write(log) print('Pedidos novos : %s' % (str(mvs[0]))) pos_ses = sist.env['pos.session'].search([('id', '=', mvs[6])]) session = sist.env['pos.session'].browse(pos_ses) caixa_usado = session.name pos_ord = sist.env['pos.order'] ord_name = '%s-%s' % (str(session.id), str(mvs[0])) coding = sys.stdout.encoding ord_ids = pos_ord.search([('pos_reference', '=', ord_name)]) #import pdb; pdb.set_trace() #print ('Pedido -'+ str(mvs[0])) dt_ord = '2018.01.01' if ord_ids: ord_p = pos_ord.browse(ord_ids) ord_pi = str(ord_p.id) print('ORD: %s' % (ord_pi)) if not ord_ids: #log = #arq.write(log) print('Importando : %s' % (str(mvs[0]))) # cortesia = tipo_venda n vals = {} cli = mvs[2] dt_ord = str(mvs[7]) vals['name'] = ord_name vals['pos_reference'] = ord_name vals['session_id'] = mvs[6] vals['pos_session_id'] = mvs[6] vals['pricelist_id'] = session.config_id.pricelist_id.id vals[ 'creation_date'] = dt_ord #datetime.strftime(datetime.now(),'%Y-%m-%d %H:%M:%S') vals['date_order'] = dt_ord vals['sequence_number'] = mvs[0] if cli != 1: vals['partner_id'] = cli else: vals['partner_id'] = sist.env['res.partner'].search( [('name', 'ilike', 'consumidor')], limit=1)[0] userid = mvs[5] if mvs[5] == 2: userid = 1 vals['user_id'] = userid vals[ 'fiscal_position_id'] = session.config_id.default_fiscal_position_id.id sqld = 'SELECT f.CODFORMA, f.FORMA_PGTO, f.VALOR_PAGO, ' \ 'f.STATE, f.TROCO, f.DESCONTO from FORMA_ENTRADA f' \ ' WHERE ID_ENTRADA = %s AND f.STATE = 1' %(str(mvs[0])) pag_ids = db.query(sqld) pag_line = [] desconto_t = 0.0 total_g = 0.0 for pg in pag_ids: pag = {} if pg[5]: desconto_t += pg[5] total_g += pg[2] jrn = '%s-' % (pg[1]) #import pdb; pdb.set_trace() jrn_id = sist.env['account.journal'].search([ ('name', 'like', jrn) ])[0] for stt in session.statement_ids: if stt.journal_id.id == jrn_id: pag['statement_id'] = stt.id company_cxt = sist.env['account.journal'].browse( jrn_id).company_id.id pag['account_id'] = sist.env['res.partner'].browse( cli).property_account_receivable_id.id pag['date'] = dt_ord pag['amount'] = pg[2] pag['journal_id'] = jrn_id pag['journal'] = jrn_id pag['partner_id'] = cli pag['name'] = ord_name pag_line.append((0, 0, pag)) #ord_id = pos_ord.create(vals) order_line = [] sqld = 'SELECT md.CODDETALHE, md.CODPRODUTO, ' \ ' md.QUANTIDADE, md.PRECO, COALESCE(md.VALOR_DESCONTO,0),' \ ' md.BAIXA, md.DESCPRODUTO, md.CORTESIA ' \ ' FROM MOVIMENTODETALHE md ' \ ' WHERE md.STATUS = 0 AND md.CodMovimento = %s' %(str(mvs[0])) md_ids = db.query(sqld) #order = pos_ord.browse(ord_id) #order.write({'fiscal_position_id' : }) vlr_total = 0.0 if desconto_t > 0: desconto_t = desconto_t / total_g for md in md_ids: try: prdname = self.asciize(md[6].encode(coding)) except: prdname = 'Nada' vlr_total += (md[2] * md[3]) - md[4] desconto = 0.0 if (md[4] > 0): desconto = md[4] / vlr_total desconto = (desconto + desconto_t) * 100 prd = {} tipo = '1' if md[7].strip(): tipo = md[7].strip() #import pdb; pdb.set_trace() prd['product_id'] = md[1] prd['discount'] = desconto prd['qty'] = md[2] prd['price_unit'] = md[3] prd['tipo_venda'] = tipo prd['name'] = prdname #prd['order_id'] = session.id order_line.append((0, 0, prd)) vals['amount_return'] = vlr_total vals['lines'] = order_line vals['statement_ids'] = pag_line order = pos_ord.create(vals) #order.add_payment(pag) #sist.env['account.bank.statement.line'].create(pag) #arq.close() #AND NOMECAIXA = %s ' %(caixa_usado) #import pdb; pdb.set_trace() sqlc = 'SELECT FIRST 2 r.IDCAIXACONTROLE, r.CODCAIXA, \ r.VALORABRE, r.VALORFECHA \ FROM CAIXA_CONTROLE r WHERE r.VALORFECHA = 1 \ ORDER BY r.CODCAIXA DESC ' caixa_fechado = db.query(sqlc) for cx in caixa_fechado: pos_ses = sist.env['pos.session'].search([('id', '=', cx[1]), ('state', '=', 'opened') ]) session = sist.env['pos.session'].browse(pos_ses) if session: session.write({'venda_finalizada': True}) print('CAIXA FECHADO , COM SUCESSO.')
def produtos(self, fim): # vendo se a categoria está cadastrada #odoo = self.con() #import pdb; pdb.set_trace() #import pudb;pu.db print('Importando Produtos') db = con.Conexao() sist = db.sistema() coding = sys.stdout.encoding #order = odoo.env['pos.order'] hj = datetime.now() hj = hj - timedelta(days=3) hj = datetime.strftime(hj, '%Y-%m-%d %H:%M:%S') #arq = open('C:\home\programas\lazarus\pdv\pdv\log_prod.log', 'w') grupo = sist.env['pos.category'] grupo_ids = grupo.search([('create_date', '>=', hj), ('parent_id', '!=', False)]) for grp in grupo.browse(grupo_ids): sqlp = 'SELECT a.COD_CATEGORIA, a.COD_FAMILIA FROM CATEGORIAPRODUTO a where a.COD_CATEGORIA = %s' % ( grp.id) grps = db.query(sqlp) if not len(grps): # procura a familia sqlp = 'SELECT a.COD_FAMILIA FROM FAMILIAPRODUTOS a where a.cod_Familia = %s' % ( grp.parent_id.id) frps = cur.query(sqlp) if not len(frps): insere = 'INSERT INTO FAMILIAPRODUTOS (DESCFAMILIA, COD_FAMILIA) VALUES (\'%s\',%s)'\ %(grp.parent_id.name, grp.parent_id.id) db.insert(insere) insere = 'INSERT INTO CATEGORIAPRODUTO (DESCCATEGORIA, COD_CATEGORIA, COD_FAMILIA) VALUES (\ \'%s\',%s, %s);' % (grp.name, grp.id, grp.parent_id.id) db.insert(insere) #fim = 5001 prod_ids = sist.env['product.product'].search([('write_date', '>=', hj), ('sale_ok', '=', True)]) #arq.write('Importando Produtos\n') print('Qtde de Produtos %s\n' % (str(len(prod_ids)))) # ('id','>',fim-200),('id', '<', fim)]) for product_id in sist.env['product.product'].browse(prod_ids): print('Produto %s\n' % (str(product_id.product_tmpl_id.id))) ncm = '' if product_id.fiscal_classification_id: ncm = product_id.fiscal_classification_id.code if ncm: ncm = re.sub('[^0-9]', '', ncm) p_custo = 0.0 if product_id.standard_price: p_custo = product_id.standard_price p_venda = 0.0 if product_id.list_price: p_venda = product_id.list_price codbarra = '' if product_id.barcode: codbarra = product_id.barcode #import pudb;pu.db #try: # produto = self.asciize(product_id.name.encode(coding)) #except: # produto = product_id.name.encode('ascii', 'ignore') produto = product_id.name #produto = product_id.name.encode('ascii', 'ignore') sqlp = 'select codproduto from produtos where codproduto = %s' % ( product_id.id) prods = db.query(sqlp) #import pdb; pdb.set_trace() if not len(prods): print('Incluindo - %s' % (product_id.name)) codp = str(product_id.id) if product_id.default_code: codp = product_id.default_code sqlp = 'select codproduto from produtos where codpro like \'%s\'' % ( codp + '%') prodsa = db.query(sqlp) if len(prodsa): if product_id.default_code: codp = product_id.default_code + '(%s)' % ( str(len(prodsa) + 1)) print('Incluindo - %s-%s' % (str(product_id.id), product_id.name)) #print ('XXX - %s' %(produto)) #import pudb;pu.db cat = '' if product_id.pos_categ_id: #cat = self.asciize(product_id.pos_categ_id.name.encode(coding)) cat = product_id.pos_categ_id.name print('CAT - %s' % (cat)) fam = '' if product_id.pos_categ_id.parent_id: #fam = self.asciize(product_id.pos_categ_id.parent_id.name.encode(coding)) fam = product_id.pos_categ_id.parent_id.name codp = str(product_id.id) if product_id.default_code: codp = product_id.default_code #un = product_id.uom_id.name.encode('ascii', 'ignore') un = product_id.uom_id.name insere = 'INSERT INTO PRODUTOS (CODPRODUTO, UNIDADEMEDIDA, PRODUTO, PRECOMEDIO, CODPRO,\ TIPOPRECOVENDA, ORIGEM, NCM, VALORUNITARIOATUAL, VALOR_PRAZO, TIPO' if codbarra: insere += ', COD_BARRA' if fam: insere += ', FAMILIA' if cat: insere += ', CATEGORIA' insere += ') VALUES (' insere += str(product_id.id) insere += ', \'' + un + '\'' insere += ', \'' + produto + '\'' insere += ',' + str(p_custo) insere += ', \'' + str(codp) + '\'' insere += ',\'F\'' insere += ',' + str(product_id.origin) insere += ',\'' + str(ncm) + '\'' insere += ',' + str(p_custo) insere += ',' + str(p_venda) insere += ',\'' + str('PROD') + '\'' if codbarra: insere += ', \'' + str(codbarra) + '\'' #insere += ', \'' + product_id.tipo_venda + '\'' #insere += ',' + str(product_id.qtde_atacado) #insere += ',' + str(product_id.preco_atacado) if fam: insere += ', \'' + str(fam) + '\'' if cat: insere += ', \'' + str(cat) + '\'' insere += ')' print(codp + '-' + product_id.name) # print ' Cadastrando : %s - %s' % (str(row[0]), row[1]) db.insert(insere) else: print('Alterando - %s' % (product_id.name)) #print ('YYYYYY - %s' %(produto)) altera = 'UPDATE PRODUTOS SET PRODUTO = ' altera += '\'' + produto + '\'' altera += ', VALOR_PRAZO = ' + str(p_venda) altera += ', NCM = ' + '\'' + str(ncm) + '\'' altera += ', ORIGEM = ' + str(product_id.origin) altera += ', RATEIO = \'' + str(product_id.tipo_venda) + '\'' altera += ', QTDEATACADO = ' + str(product_id.qtde_atacado) altera += ', PRECOATACADO = ' + str(product_id.preco_atacado) if codbarra: altera += ', COD_BARRA = \'' + str(codbarra) + '\'' altera += ' WHERE CODPRODUTO = ' + str(product_id.id) db.insert(altera) #arq.close() #print ('FIM - %s' %(str(fim))) print('Integracao realizada com sucesso.')
def caixas(self): db = con.Conexao() sist = db.sistema() arq = open('log_integracao.log', 'w') hj = datetime.now() hj = hj - timedelta(days=5) hj = datetime.strftime(hj, '%Y-%m-%d %H:%M:%S') #import pudb;pu.db #import pdb; pdb.set_trace() usuario = sist.env['res.users'] user_ids = usuario.search([('write_date', '>=', hj)]) for usr in usuario.browse(user_ids): log = 'Usuarios novos : %s\n' % (usr.name.encode( 'ascii', 'ignore').decode('ascii')) arq.write(log) sqlp = 'SELECT CODUSUARIO FROM USUARIO where CODUSUARIO = %s' % ( str(usr.id)) usrq = db.query(sqlp) if not len(usrq): barcode = '' if usr.barcode: barcode = usr.barcode log = 'Cadastrando Usuario novo : %s\n' % (usr.name.encode( 'ascii', 'ignore').decode('ascii')) arq.write(log) insere = 'INSERT INTO USUARIO (CODUSUARIO, NOMEUSUARIO, ' insere += 'STATUS, PERFIL, SENHA, CODBARRA) VALUES (' insere += '%s' insere += ',\'%s\'' insere += ', 1' insere += ',\'CAIXA\',' insere += ',\'CAIXA\',' insere += ',\'%s\');' insere = insere % (str(usr.id), str(usr.name), str(barcode)) db.insert(insere) sessao = sist.env['pos.session'] # ('state','=', 'opened') sessao_ids = sessao.search([ ('create_date', '>=', hj), ]) #('state','=','opened') #import pdb; pdb.set_trace() for ses in sessao.browse(sessao_ids): log = 'Caixas aberto: %s\n' % (ses.name.encode( 'ascii', 'ignore').decode('ascii')) arq.write(log) sqlp = 'SELECT CODCAIXA FROM CAIXA_CONTROLE where CODCAIXA = %s' % ( str(ses.id)) sess = db.query(sqlp) if not len(sess): log = 'Inserindo Caixa: %s\n' % (ses.name.encode( 'ascii', 'ignore').decode('ascii')) arq.write(log) state = 'c' # close if ses.state == 'opened': state = 'o' insere = 'INSERT INTO CAIXA_CONTROLE (IDCAIXACONTROLE, ' insere += 'CODCAIXA, CODUSUARIO, SITUACAO, DATAFECHAMENTO' insere += ',NOMECAIXA) VALUES (' insere += '%s' insere += ',%s' insere += ',%s' insere += ',\'%s\'' insere += ',\'%s\'' insere += ',\'%s\');' #import pudb;pu.db insere = insere %(str(ses.id), str(ses.id), str(ses.user_id.id), str(state) \ ,str('01.01.2018'), str(ses.name)) db.insert(insere) else: if ses.state != 'opened': altera = 'UPDATE CAIXA_CONTROLE SET SITUACAO = \'F\'' altera += ' WHERE IDCAIXACONTROLE = %s' % (str(ses.id)) db.insert(altera) arq.close()