def main(): step("Connectant a l'erp") O = Client(**configdb.erppeek) success("Connectat a: {}".format(O)) success("Usuaria: {}".format(O.user)) fiscal_year_id = O.model('account.fiscalyear').search([('name', 'ilike', '2021')])[0] fiscal_year = O.model('account.fiscalyear').browse(fiscal_year_id) step("Demanem el balanç per l'any {}".format(fiscal_year.name)) O.wizard( 'account.balance.full.report', { 'form': { 'company_id': 1, 'account_list': [[6, 0, []]], 'fiscalyear': fiscal_year_id, 'display_account': 'bal_mouvement', 'state': 'none', 'periods': [(6, 0, [])], 'all_accounts': True, 'context': {}, 'display_account_level': 5 } }, 'excelFile_async')
def add_high_risk_observation(patient_id, database="openeobs_quality_assurance_db", user="******", password="******"): """ Add an observation that gives medium clinical risk due to 3in1 :param patient_id: The patient to do observation for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") ews_api = odoo_client.model("nh.clinical.patient.observation.ews") ews_activity_id = ews_api.create_activity({}, {"patient_id": patient_id}) activity_api.submit(ews_activity_id, HIGH_RISK_SCORE_11_EWS_DATA) activity_api.complete(ews_activity_id)
def remove_tasks_for_patient(patient_id, activity_models=[], database='openeobs_quality_assurance_db', user='******', password='******'): """ Remove a specific task for a patient :param patient_id: The patient to remove tasks for :param activity_models: The activity model to remove :param database: database to run against :param user: the username to run as :param password: password for username """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') spells = activity_api.search([ ['state', '=', 'started'], ['data_model', '=', 'nh.clinical.spell'], ['patient_id', '=', patient_id] ]) activities = activity_api.search([ ['data_model', 'in', activity_models], ['parent_id', 'in', spells] ]) activity_api.unlink(activities)
def task_scan_helper(task_id, database="openeobs_quality_assurance_db", user="******", password="******"): """ use a task id to get id for do a barcode scan :param task_id: ID of Task to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") patient_api = odoo_client.model("nh.clinical.patient") activity_record = activity_api.read(int(task_id), ["patient_id"]) patient_id = activity_record["patient_id"][0] patient_record = patient_api.read( patient_id, ["other_identifier", "patient_identifier", "display_name", "current_location_id"] ) return patient_record
def add_no_risk_observation( patient_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ Add an observation that gives no clinical risk :param patient_id: The patient to do observation for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') ews_api = odoo_client.model('nh.clinical.patient.observation.ews') ews_activity_id = ews_api.create_activity({}, {'patient_id': patient_id}) activity_api.submit(ews_activity_id, NO_RISK_EWS_DATA) activity_api.complete(ews_activity_id)
def add_no_risk_observation( patient_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ Add an observation that gives no clinical risk :param patient_id: The patient to do observation for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') ews_api = odoo_client.model('nh.clinical.patient.observation.ews') ews_activity_id = ews_api.create_activity({}, {'patient_id': patient_id}) activity_api.submit(ews_activity_id, NO_RISK_EWS_DATA) activity_api.complete(ews_activity_id)
def add_stand_in(database="openeobs_quality_assurance_db", user="******", password="******"): """ Add a stand in task :param database: The database to do stand in on :param user: User to create stand in as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") ews_api = odoo_client.model("nh.clinical.patient.follow") user_pool = odoo_client.model("res.users") nurse_id = user_pool.search([["login", "=", "nasir"]]) ews_activity_id = ews_api.create_activity({"user_id": nurse_id[0]}, {"patient_ids": [[6, 0, [4]]]}) activity_api.submit(ews_activity_id, {}) return ews_activity_id
def patient_helper(patient_id, database="openeobs_quality_assurance_db", user="******", password="******"): """ use a patient id to get id for do a barcode scan :param patient_id: ID of patient to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) return odoo_client.model("nh.eobs.api").get_patients([int(patient_id)])
def complete_stand_in(task_id, database="openeobs_quality_assurance_db", user="******", password="******"): """ Complete a stand in task :param database: The database to complete stand in on :param user: User to complete stand in as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") activity_api.complete(task_id)
def task_helper(task_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ use a task id to get id for do a barcode scan :param task_id: ID of Task to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) return odoo_client.model('nh.eobs.api').get_activities([task_id])
def patient_helper(patient_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ use a patient id to get id for do a barcode scan :param patient_id: ID of patient to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) return odoo_client.model('nh.eobs.api').get_patients([int(patient_id)])
def task_scan_helper(task_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ use a task id to get id for do a barcode scan :param task_id: ID of Task to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') patient_api = odoo_client.model('nh.clinical.patient') activity_record = activity_api.read(int(task_id), ['patient_id']) patient_id = activity_record['patient_id'][0] patient_record = patient_api.read(patient_id, [ 'other_identifier', 'patient_identifier', 'display_name', 'current_location_id' ]) return patient_record
def task_scan_helper(task_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ use a task id to get id for do a barcode scan :param task_id: ID of Task to do foo :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') patient_api = odoo_client.model('nh.clinical.patient') activity_record = activity_api.read(int(task_id), ['patient_id']) patient_id = activity_record['patient_id'][0] patient_record = patient_api.read(patient_id, [ 'other_identifier', 'patient_identifier', 'display_name', 'current_location_id' ]) return patient_record
def complete_stand_in(task_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ Complete a stand in task :param database: The database to complete stand in on :param user: User to complete stand in as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') activity_api.complete(task_id)
def add_stand_in(database='openeobs_quality_assurance_db', user='******', password='******'): """ Add a stand in task :param database: The database to do stand in on :param user: User to create stand in as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') ews_api = odoo_client.model('nh.clinical.patient.follow') user_pool = odoo_client.model('res.users') nurse_id = user_pool.search([ ['login', '=', 'nasir'], ]) ews_activity_id = ews_api.create_activity({'user_id': nurse_id[0]}, { 'patient_ids': [[6, 0, [4]]]}) activity_api.submit(ews_activity_id, {}) return ews_activity_id
def add_stand_in(database='openeobs_quality_assurance_db', user='******', password='******'): """ Add a stand in task :param database: The database to do stand in on :param user: User to create stand in as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') ews_api = odoo_client.model('nh.clinical.patient.follow') user_pool = odoo_client.model('res.users') nurse_id = user_pool.search([ ['login', '=', 'nasir'], ]) ews_activity_id = ews_api.create_activity({'user_id': nurse_id[0]}, { 'patient_ids': [[6, 0, [4]]]}) activity_api.submit(ews_activity_id, {}) return ews_activity_id
class TestUnsusbcribeEmailMembers(TestCase): def setUp(self): self.erp_client = Client(**configdb.erppeek) self.IrModelData = self.erp_client.model('ir.model.data') self.Soci = self.erp_client.model('somenergia.soci') self.ResPartnerAddress = self.erp_client.model('res.partner.address') @skip("NO") def test__get_member_category_id(self): category_id = get_member_category_id() self.assertIsNotNone(category_id) category_name = self.erp_client.model('res.partner.category').read( category_id, ['name'])['name'] self.assertEqual(category_name, 'Soci') @skip("NO") def test__get_not_members_addresses(self): category_id = 8 query = [('category_id', 'not in', [category_id]), ('ref', 'like', 'S%')] not_members = self.Soci.search(query) not_members_partner_ids = [ soci['partner_id'][0] for soci in self.Soci.read(not_members, ['partner_id']) ] address_list = self.ResPartnerAddress.search([ ('partner_id', 'in', not_members_partner_ids) ]) emails_list = [ address.get('email', 'not found') for address in self.ResPartnerAddress.read(address_list, ['email']) ] self.assertTrue(bool(emails_list))
def main(server, days_ago): url = urlparse(server) server = '{p.scheme}://{p.hostname}:{p.port}'.format(p=url) db = url.path.lstrip('/') user = url.username password = url.password c = Client(server, db, user, password) logger.info('Connected to %s@%s', server, db) d = (date.today() - timedelta(days=days_ago)).strftime('%Y-%m-%d') export_p5d = c.model('wizard.export.comer.p5d') wiz = export_p5d.create({ 'date_from': d, 'date_to': d, 'file_format': 'cch_val' }) wiz.export() logger.info('Queued P5D export for %s', d)
def main(server, days_ago): url = urlparse(server) server = '{p.scheme}://{p.hostname}:{p.port}'.format(p=url) db = url.path.lstrip('/') user = url.username password = url.password c = Client(server, db, user, password) logger.info('Connected to %s@%s', server, db) d = (date.today() - timedelta(days=days_ago)).strftime('%Y-%m-%d') export_p5d = c.model('wizard.export.comer.p5d') wiz = export_p5d.create({ 'date_from': d, 'date_to': d, 'file_format': 'cch_val' }) wiz.export() logger.info('Queued P5D export for %s', d)
def remove_tasks_for_patient( patient_id, activity_models=[], database="openeobs_quality_assurance_db", user="******", password="******" ): """ Remove a specific task for a patient :param patient_id: The patient to remove tasks for :param activity_models: The activity model to remove :param database: database to run against :param user: the username to run as :param password: password for username """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") spells = activity_api.search( [["state", "=", "started"], ["data_model", "=", "nh.clinical.spell"], ["patient_id", "=", patient_id]] ) activities = activity_api.search([["data_model", "in", activity_models], ["parent_id", "in", spells]]) activity_api.unlink(activities)
def remove_observations_for_patient( patient_id, database="openeobs_quality_assurance_db", user="******", password="******" ): """ Remove all the observations for the patient :param patient_id: The patient to remove obs for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client("http://localhost:8069", db=database, user=user, password=password) activity_api = odoo_client.model("nh.activity") spells = activity_api.search( [["state", "=", "started"], ["data_model", "=", "nh.clinical.spell"], ["patient_id", "=", patient_id]] ) obs = activity_api.search( [["data_model", "=", "nh.clinical.patient.observation.ews"], ["parent_id", "in", spells]] ) activity_api.unlink(obs)
def remove_observations_for_patient( patient_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ Remove all the observations for the patient :param patient_id: The patient to remove obs for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') spells = activity_api.search([ ['state', '=', 'started'], ['data_model', '=', 'nh.clinical.spell'], ['patient_id', '=', patient_id] ]) obs = activity_api.search([ ['data_model', '=', 'nh.clinical.patient.observation.ews'], ['parent_id', 'in', spells] ]) activity_api.unlink(obs)
def remove_observations_for_patient( patient_id, database='openeobs_quality_assurance_db', user='******', password='******'): """ Remove all the observations for the patient :param patient_id: The patient to remove obs for :param database: The database to do observation on :param user: User to carry out observation as :param password: Password for the user """ odoo_client = Client('http://localhost:8069', db=database, user=user, password=password) activity_api = odoo_client.model('nh.activity') spells = activity_api.search([ ['state', '=', 'started'], ['data_model', '=', 'nh.clinical.spell'], ['patient_id', '=', patient_id] ]) obs = activity_api.search([ ['data_model', '=', 'nh.clinical.patient.observation.ews'], ['parent_id', 'in', spells] ]) activity_api.unlink(obs)
def profile(host, port, db, user, di, df, servertype): connection = ('http://{host}:{port}'.format(host=host, port=str(port))) c = Client(connection, db, user) if servertype == 'd': inv_type = 'out%' else: inv_type = 'in%' factura_obj = c.model('giscedata.facturacio.factura') factura_ids = factura_obj.search( [('data_inici', '<=', df), ('data_final', '>=', di), ('type', '=like', inv_type), ('tipo_rectificadora', 'in', ['N', 'R', 'RA']), ('state', '!=', 'draft')], 0, 0, 'origin_date_invoice asc') print('# Factures: {}'.format(len(factura_ids))) print('From {} to {}'.format(di, df)) logger = setup_logger() logger_fail = setup_logger_fail() logger.info('#### START PROFILING #{} factures'.format(len(factura_ids))) for factura_id in tqdm(factura_ids): if servertype == 'd': if factura_obj.check_profilable_distri(factura_id): factura_obj.encua_perfilacio([factura_id]) logger.info('# Profiled factura_id: {}'.format(factura_id)) else: logger_fail.info( '# NO Profilable factura_id: {}'.format(factura_id)) if servertype == 'c': if factura_obj.check_profilable_comer(factura_id): factura_obj.encua_perfilacio([factura_id]) logger.info('# Profiled factura_id: {}'.format(factura_id)) else: logger_fail.info( '# NO Profilable factura_id: {}'.format(factura_id))
# db = 'database' # user = '******' # pwd = 'pwd' # port = 8069 # uri = 'http://{0}.erp.clients'.format(db) # %load https://raw.githubusercontent.com/gisce/powerp-tools/master/profiles_assign_invoice.py from erppeek import Client erp = Client(server=uri + ":" + str(port), user=user, password=pwd, db=db) invoices = erp.model('giscedata.facturacio.factura') profiles = erp.model('giscedata.perfils.perfil') search_params = [('state', 'in', ('open', 'paid')), ('invoice_id.journal_id.code', 'ilike', 'ENERGIA%')] search_params_cancelling = search_params[:] search_params_cancelling.append(('tipo_rectificadora', 'in', ('R', 'A', 'B'))) cancelling_invoice_ids = invoices.search(search_params_cancelling) if cancelling_invoice_ids: cancelling_invoices = invoices.read(cancelling_invoice_ids, ['ref']) cancelled_invoice_ids = [x['ref'][0] for x in cancelling_invoices] search_params.extend([('id', 'not in', cancelled_invoice_ids)]) search_params.extend([ ('tipo_rectificadora', 'in', ('N', 'R')), ])
import dbconfig from time import sleep O = Client(**dbconfig.erppeek) sw_obj = O.GiscedataSwitching models = [ 'giscedata.switching.a3.02', 'giscedata.switching.a3.04', 'giscedata.switching.c1.02', 'giscedata.switching.c2.02' ] print "Revisarem els models següents:" print models te_adjunt = False for model in models: model_obj = O.model(model) print "Comencem el model " + model passos_ids = model_obj.search([('rebuig', '=', True), ('rebuig_ids', '=', []), ('data_rebuig', '>', '2021-09-01')]) print "Pas 1: Hi ha " + str(len(passos_ids)) + " a reimportar." for pas_id in passos_ids: pas = model_obj.browse(pas_id) cas = sw_obj.browse(pas.sw_id.id) # En guardem l'estat old_states = {} old_states['notificacio_pendent'] = cas.notificacio_pendent old_states['enviament_pendent'] = cas.enviament_pendent old_states['validacio_pendent'] = cas.validacio_pendent sw_id = cas.id ia_ids = O.IrAttachment.search([('res_model', '=',
amount_per_day=-0.008857 description = "Abonament del cobrament indegut del lloguer de comptador sense CCH durant el 2016" start_date = '2016-01-01' end_date = '2016-12-31' uos_id = 16 # ALQ/dia products_ids = [193] from erppeek import Client erp = Client(server=uri+":"+str(port), user=user, password=pwd, db=db) for product_id in products_ids: line_ids = erp.model('giscedata.facturacio.factura.linia').search( [ ('product_id','=', product_id) ] ) if line_ids: lines = erp.model('giscedata.facturacio.factura.linia').read( line_ids, ['factura_id','quantity','uos_id'] ) seen = set() for line in lines: invoice_id = line['factura_id'][0] if invoice_id in seen: raise Exception("More than one line per invoice") else: seen.add(invoice_id)
import configdb import argparse, csv import traceback from erppeek import Client from tqdm import tqdm from datetime import datetime, timedelta from consolemsg import step, success, error, warn import sys step("Connectant a l'erp") c = Client(**configdb.erppeek) step("Connectat") pol_o = c.GiscedataPolissa fact_obj = c.GiscedataFacturacioFactura lect_obj = c.model('giscedata.lectures.lectura') lect_pot_obj = c.model('giscedata.lectures.potencia') carrega_lect_wiz_o = c.model('giscedata.lectures.pool.wizard') wiz_ranas_o = c.model('wizard.ranas') wiz_ag_o = c.model('wizard.group.invoices.payment') po_obj = c.model('payment.order') plantilla_id = 338 sense_lectures = [] #No n'hi ha lectures per esborrar sense_factures_rectificar = [] #No tenen factures normals per rectificar amb_f_esborrany = [] #Tenen factures normals en esborrany, cal esborrar-les? factures_generades = [] #Factures Re i AB fetes polisses_processades = [] errors = [] #Ha hagit un error inesperat al processar la polissa not_found = [] # origens no trobats
# db = 'database' # user = '******' # pwd = 'pwd' # port = 8069 # uri = 'http://{0}.erp.clients'.format(db) # # date = '2017-03-01' # # %load https://raw.githubusercontent.com/gisce/powerp-tools/master/get_cch_policies_without_tg_meter.py from erppeek import Client erp = Client(server=uri + ":" + str(port), user=user, password=pwd, db=db) policies = [] policy_amendment_ids = erp.model('giscedata.polissa.modcontractual').search( [('data_inici', '=', date), ('tg', '=', 1)], 0, None, None, {'active_test': False}) if policy_amendment_ids: for policy_amendment in erp.model( 'giscedata.polissa.modcontractual').browse(policy_amendment_ids, ): meter_id = policy_amendment.polissa_id.comptadors_actius(date, date) meter = erp.model('giscedata.lectures.comptador').browse(meter_id) if meter.tg == False: policies.append(policy_amendment.polissa_id.name) print policy_amendment.polissa_id.name print policies
# -*- coding: utf-8 -*- from erppeek import Client from datetime import datetime, timedelta import configdb O = Client(**configdb.erppeek) comp_obj = O.GiscedataLecturesComptador lectP_obj = O.GiscedataLecturesLecturaPool lectF_obj = O.GiscedataLecturesLectura pol_obj = O.GiscedataPolissa clot_obj = O.GiscedataFacturacioContracte_lot cups_obj = O.GiscedataCupsPs mandate_obj = O.PaymentMandate sw_obj = O.GiscedataSwitching m101_obj = O.model('giscedata.switching.m1.01') fact_obj = O.GiscedataFacturacioFactura #Taules resum errors = [] realitats = [] sense_dul = [] ab_error = [] sense_lectura_distri = [] sense_canvi_pagador = [] def resum_canvis_titular(total, realitats, sense_dul, ab_error, sense_lectura_distri, sense_canvi_pagador, errors): print "TOTAL DE CANVIS SOL·LICITATS: {}".format(total) print "CANVIS DE TITULARS REALITZATS: {}".format(len(realitats))
import argparse import csv import traceback from erppeek import Client from tqdm import tqdm from datetime import datetime import sys from consolemsg import error, step, success, warn import configdb step("Connectant a l'erp") c = Client(**configdb.erppeek) step("Connectat") pol_o = c.GiscedataPolissa fact_obj = c.model('giscedata.facturacio.factura') no_correspon_prov = [] no_correspon_prov_ids = [] differents = [] facts_ok = [] errors_buscant = [] def output_results(): success("Resultat final") success("----------------") success("Factures ok: {}", len(facts_ok)) success("----------------")
MAX_WORKERS = configdb.MAX_CONC LANG_DICT = { 'es_ES': 'condicions_generals_som_01_es', 'ca_ES': 'condicions_generals_som_01_ca', 'gl_ES': 'condicions_generals_som_01_ga', 'eu_ES': 'condicions_generals_som_01_ek', } erp_client = Client(**configdb.erppeek) step("Connecting to: {}".format(erp_client._server)) Polissa = erp_client.model('giscedata.polissa') CondicionsGenerals = erp_client.model('giscedata.polissa.condicions.generals') IrModelData = erp_client.model('ir.model.data') def get_general_condition(lang): condicions_lang_id = IrModelData.get_object_reference( 'som_polissa_condicions_generals', LANG_DICT.get(lang, 'condicions_generals_som_01_es') )[1] return CondicionsGenerals.browse(condicions_lang_id) def set_general_condition(polissa, sem): step("Setting general conditions for contract: {}".format(polissa.name)) conditions = get_general_condition(polissa.titular.lang)
import base64 import csv import sys import traceback from collections import namedtuple from os import name, path from zipfile import ZipFile from consolemsg import error, step, success from erppeek import Client import configdb c = Client(**configdb.erppeek) Switching = c.model('giscedata.switching') Attachment = namedtuple('Attachment', 'name, data') ''' Example of csv cups ES0223000033002674TF; ES0021011010463809XW; ES0021000014495564TA; ''' def csv_to_cups(cups_csv): with open(cups_csv) as csv_file: reader = csv.DictReader(csv_file, delimiter=str(u';').encode('utf-8')) cupses = [row['cups'] for row in reader]
import argparse import csv import traceback from erppeek import Client from tqdm import tqdm from datetime import datetime import sys from consolemsg import error, step, success, warn import configdb step("Connectant a l'erp") c = Client(**configdb.erppeek) step("Connectat") pol_o = c.GiscedataPolissa f1_obj = c.model('giscedata.facturacio.importacio.linia') lect_obj = c.GiscedataLecturesLectura missing_names = [] #noms de pòlisses no trobades altres_auto = [] #polisses amb autoconsum != 41 sense_f1_g = [] #polisses per les quals no s'ha trobat un f1G no facturat f1_more_atrfact = [] #Cups de F1 amb més d'una factura dins de l'f1 ja_facturats = [] #L'F1 ja està facturat no_auto = [] #l'F1 no té línies de generació no_negatiu = [] # l'F1 no té cap línia d'energia quantitat negativa sense_lect_pre = [] sense_lect_post = [] no_3_lect_pre = [] no_3_lect_post = [] err_lect_post = [] set_zero_c = [] #polisses processades ok
import configdb import argparse, csv import traceback from erppeek import Client from tqdm import tqdm from datetime import datetime, timedelta from consolemsg import step, success, error, warn import sys step("Connectant a l'erp") c = Client(**configdb.erppeek) step("Connectat") pol_o = c.GiscedataPolissa fact_obj = c.GiscedataFacturacioFactura lect_obj = c.model('giscedata.lectures.lectura') lect_pot_obj = c.model('giscedata.lectures.potencia') carrega_lect_wiz_o = c.model('giscedata.lectures.pool.wizard') wiz_ranas_o = c.model('wizard.ranas') avancar_f_wiz_o = c.model('wizard.avancar.facturacio') modcon_obj = c.model('giscedata.polissa.modcontractual') polisses_inicials = [] # totes les polisses inicials te_facturacio_suspesa = [] # te facturació suspesa no_corregits = [] #No te abonadora de proveïdor sense_lectures = [] #No n'hi ha lectures per esborrar sense_factures_rectificar = [] #No tenen factures normals per rectificar amb_f_esborrany = [] #Tenen factures normals en esborrany, cal esborrar-les? pols_rectificades = [] #S'ha fet la Abonadora i Rectificadora pols_avancades = [] #S'ha avançat facturació pols_no_avancades = [] #No s'ha avançat facturació
def main(): def factures_dextralines_en_estat_correcte(): all_el = el_obj.search([('product_id', '=', fracc_prod_id), ('active', '=', True), ('total_amount_pending', '>', 0)]) for el in all_el: extra_line = el_obj.browse(el) factura_origin_id = int(extra_line.origin) fact = fact_obj.browse(factura_origin_id) ps = fact.invoice_id.pending_state if ps and ps.id in [correct_state_dp, correct_state_bs]: if ps.process_id.id == 1: ai_obj.set_pending([fact.invoice_id.id], estat_fracc_extra_dp) print( "La factura {} ha passat d'estat Correcte a 'Fraccionament Extralines'" .format(fact.number)) else: ai_obj.set_pending([fact.invoice_id.id], estat_fracc_extra_bs) print( "La factura {} ha passat d'estat Correcte a 'Fraccionament Extralines'" .format(fact.number)) else: continue if fact.invoice_id.pending_state: print("La factura {} no té estat correcte.Té estat: {}". format(fact.number, fact.invoice_id.pending_state.name)) else: print("La factura {} no té estat correcte.Té estat: False". format(fact.number)) def extralines_factures_liquidades(): day_to_compare = (datetime.now() - timedelta(days=5)).strftime('%Y-%m-%d') all_paid_el = el_obj.search([('product_id', '=', fracc_prod_id), ('active', '=', True), ('total_amount_pending', '=', 0), ('write_date', '>=', day_to_compare)]) for el in all_paid_el: extra_line = el_obj.browse(el) factura_origin_id = int(extra_line.origin) fact = fact_obj.browse(factura_origin_id) ps = fact.invoice_id.pending_state if ps and ps.id in [estat_fracc_extra_dp, estat_fracc_extra_bs]: if ps.process_id.id == 1: ai_obj.set_pending([fact.invoice_id.id], correct_state_dp) print( "La factura {} ha passat d'estat 'Fraccionament Extralines' a Correcte" .format(fact.number)) else: ai_obj.set_pending([fact.invoice_id.id], correct_state_bs) print( "La factura {} ha passat d'estat 'Fraccionament Extralines' a Correcte" .format(fact.number)) else: continue if fact.invoice_id.pending_state: print( "La factura {} no té estat fraccionament.Té estat: {}". format(fact.number, fact.invoice_id.pending_state.name)) else: print( "La factura {} no té estat fraccionament.Té estat: False" .format(fact.number)) step("Connectant a l'erp") c = Client(**configdb.erppeek) success("Connectat a: {}".format(c)) success("Usuaria: {}".format(c.user)) ai_obj = c.model('account.invoice') aips_obj = c.model('account.invoice.pending.state') fact_obj = c.model('giscedata.facturacio.factura') el_obj = c.model('giscedata.facturacio.extra') product_obj = c.model('product.product') fracc_prod_id = product_obj.search([('name', '=', 'Pagament Fraccionat')]) estat_fracc_extra_dp = aips_obj.search([('process_id', '=', 1), ('name', 'ilike', 'fraccionament extralines')])[0] estat_fracc_extra_bs = aips_obj.search([('process_id', '=', 3), ('name', 'ilike', 'fraccionament extralines')])[0] correct_state_dp = aips_obj.search([('process_id', '=', 1), ('name', 'ilike', 'correct')])[0] correct_state_bs = aips_obj.search([('process_id', '=', 3), ('name', 'ilike', 'correct')])[0] step("Actualitzant factures d'extralines en estat correcte...") factures_dextralines_en_estat_correcte() step("Actualitzant factures d'extralines en estat correcte...") extralines_factures_liquidades()
def main(from_date, to_date, tariff, email): erp_client = Client(**configdb.erppeek) mongo_client = pymongo.MongoClient(configdb.mongodb) mongo_db = mongo_client.somenergia polissa_obj = erp_client.model('giscedata.polissa') today = datetime.today().date() erp_fields = [ 'tg', 'distribuidora', 'autoconsumo', 'cups', 'data_alta', 'data_ultima_lectura', 'tarifa', 'name', 'data_ultima_lectura_f1', 'tipo_medida', ] mongo_fields = get_mongo_fields() csv_name = 'curves_info_{}.csv'.format(datetime.now().strftime("%Y-%m-%d")) csv_fields = erp_fields + ['data_ultima_lectura_factura_real', 'data_avui'] + mongo_fields csv_fields.remove('data_ultima_lectura') step('creating csv...') create_csv(csv_name, csv_fields) step('Getting polissa data') polissas = get_polissa(erp_client, polissa_obj, tariff) step('Getting CCHs') for polissa_id in polissas: try: polissa = polissa_obj.read(polissa_id, erp_fields) cleared_polissa = { key:value if value.__class__ != list else value[1].encode('utf-8') for key,value in polissa.items() } cleared_polissa['cups'] = cleared_polissa['cups'][:6] cleared_polissa['data_avui'] = today lectura_F1ATR = polissa['data_ultima_lectura_f1'] cleared_polissa['data_ultima_lectura_factura_real'] = cleared_polissa['data_ultima_lectura'] del cleared_polissa['id'] del cleared_polissa['data_ultima_lectura'] if bool(lectura_F1ATR): mongo_data_f5d = get_mongo_data( mongo_db=mongo_db, mongo_collection='tg_cchfact', curve_type='f5d', cups=polissa['cups'][1], from_date=from_date, to_date=to_date, ) mongo_data_f1 = get_mongo_data( mongo_db=mongo_db, mongo_collection='tg_f1', curve_type='f1', cups=polissa['cups'][1], from_date=from_date, to_date=to_date, ) mongo_data_p5d = get_mongo_data( mongo_db=mongo_db, mongo_collection='tg_cchval', curve_type='p5d', cups=polissa['cups'][1], from_date=from_date, to_date=to_date, ) mongo_data_p1 = get_mongo_data( mongo_db=mongo_db, mongo_collection='tg_p1', curve_type='p1', cups=polissa['cups'][1], from_date=from_date, to_date=to_date, ) cleared_polissa.update(mongo_data_f5d) cleared_polissa.update(mongo_data_f1) cleared_polissa.update(mongo_data_p5d) cleared_polissa.update(mongo_data_p1) add_row_in_csv(csv_name, header=csv_fields, element=cleared_polissa) except Exception as e: print("Error a la polissa amb id {}: {}".format(polissa_id, e)) sleep(0.1) step('ready to send the email') tar_filename = 'curves_molonguis_{}.tar.gz'.format(datetime.now().strftime("%Y-%m-%d")) make_tarfile(tar_filename, csv_name) sendmail2all(configdb.user, tar_filename, email)
def f_spawned(*args, **kwargs): if not os.getenv('SPAWNED', False): spawn.hash_lock.acquire() logger = netsvc.Logger() # self, cursor, uid, *args osv_object = args[0] cursor = args[1] uid = args[2] if self.n_args < 0: self.n_args = len(args) if not self.link: self.link = f.__name__ hash_instance = compute_hash_instance( cursor.dbname, osv_object, self.link, args[3:self.n_args] ) spawn_proc = RUNNING_INSTANCES.get(hash_instance, SpawnProc(-1, 0, 0)) try: if psutil.Process(spawn_proc.pid) and self.uniq: if isinstance(args[-1], dict): context = args[-1] spawn.hash_lock.release() raise except_osv("Error", _(u"Already running pid: %s by user: %s at: %s") % (spawn_proc.pid, spawn_proc.user, spawn_proc.startup) ) except psutil.NoSuchProcess: pass sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1', 0)) child_port = sock.getsockname()[1] sock.listen(1) sock.shutdown(socket.SHUT_RDWR) user_obj = osv_object.pool.get('res.users') # Aquí hem de fer l'spawn env = os.environ.copy() env['SPAWNED'] = '1' command = sys.argv[:] command[0] = os.path.join(config['root_path'], 'openerp-server.py') command += ['--port=%i' % child_port, '--no-netrpc', '--update=False', '--database=%s' % cursor.dbname, '--logfile=%s' % tempfile.mkstemp()[1], '--pidfile=%s' % os.devnull] # Try to check if we have a conf file conf_found = [x for x in command if x.startswith('--conf=')] # If we don't found a conf file try to check if exists in # os env. # This is usefull spawning openerp instances from process that # aren't openerp instances. As a OORQ if not conf_found: conf_path = os.getenv('OPENERP_SERVER', False) if conf_path: command += ['--conf=%s' % os.getenv('OPENERP_SERVER')] start = datetime.now() logger.notifyChannel('spawn_oop', netsvc.LOG_INFO, 'Spawned ' 'new process: %s' % ' '.join(command)) p = psutil.Popen(command, env=env) user = user_obj.browse(cursor, uid, uid).login name = user_obj.browse(cursor, uid, uid).name pwd = user_obj.browse(cursor, uid, uid).password uri = self.get_uri(child_port) is_listen = False timeout = int(os.getenv('SPAWN_OOP_TIMEOUT', 20)) while not is_listen: if timeout <= 0: if isinstance(args[-1], dict): context = args[-1] raise Exception( _('Error timeout starting spawned instance.') ) try: Client(server=uri, db=cursor.dbname, user=user, password=pwd) is_listen = True except: time.sleep(0.1) timeout -= 0.1 is_listen = False startup = datetime.now() - start if self.uniq: RUNNING_INSTANCES[hash_instance] = SpawnProc(p.pid, start, name) logger.notifyChannel('spawn_oop', netsvc.LOG_INFO, 'Server started in %s. PID: %s. Listening on %s. ' 'Hash instance: %s ' % (startup, p.pid, child_port, hash_instance) ) spawn.hash_lock.release() start = datetime.now() c = Client(server=uri, db=cursor.dbname, user=user, password=pwd) obj = c.model(osv_object._name) method = f.__name__ newargs = args[3:] logger.notifyChannel('spawn_oop', netsvc.LOG_INFO, 'Calling %s.%s(%s)' % ( osv_object._name, method, ', '.join([str(x) for x in newargs]) ) ) res = getattr(obj, method)(*newargs) duration = datetime.now() - start po = psutil.Process(p.pid) for child in po.get_children(): try: child.kill() child.wait(timeout=5) except psutil.TimeoutExpired: child.send_signal(psutil.signal.SIGKILL) po.kill() po.wait() if self.uniq: del RUNNING_INSTANCES[hash_instance] logger.notifyChannel('spawn_oop', netsvc.LOG_INFO, 'Server ' 'stopped. PID: %s. Duration %s.' % (p.pid, duration)) return res else: return f(*args, **kwargs)
import re from datetime import datetime, timedelta from concurrent.futures import wait, ThreadPoolExecutor from consolemsg import step, success, warn from erppeek import Client import configdb erp_client = Client(**configdb.erppeek) step("Connected to: {}".format(erp_client._server)) FacturacioFactura = erp_client.model('giscedata.facturacio.factura') FacturacioImportacioLinia = erp_client.model( 'giscedata.facturacio.importacio.linia') ID_REGEX = re.compile(r'.*:\s*\[(?P<xml_id>\d+)\]') def get_f1s(error_code, codi_distri=None): query = [('info', 'ilike', '{}]'.format(error_code)), ('data_carrega', '>=', '2019-05-13')] if codi_distri: query.append(('ree_source_code', 'ilike', codi_distri)) return FacturacioImportacioLinia.browse(query) def delete_1006(test=True):
#SCRIPT QUE SERVEIX PER DESBLOQUEJAR CASOS QUE NO TENEN LECTURA DE # TANCAMENT DEL COMPTADOR DE BAIXA O = Client(**configdb.erppeek) #Objectes pol_obj = O.GiscedataPolissa clot_obj = O.GiscedataFacturacioContracte_lot comp_obj = O.GiscedataLecturesComptador lectF_obj = O.GiscedataLecturesLectura lectP_obj = O.GiscedataLecturesLecturaPool #fact_obj = O.GiscedataFacturacioFactura #cups_obj = O.GiscedataCupsPs mod_obj = O.GiscedataPolissaModcontractual sw_obj = O.GiscedataSwitching m105_obj = O.model('giscedata.switching.m1.05') #constants: lot_id = O.GiscedataFacturacioLot.search([('state','=','obert')]) #Inicicialitzadors polisses_resoltes_alinear_dates = [] cefaco= [] errors = [] final = [] un_comptador_una_mod = [] un_comptador_multiples_mod = [] un_comptador_sense_lectura_tall = [] sense_comptador_baixa = [] casos_normals_canvi_comptador = [] cx06 = []
# uri = 'http://{0}.erp.clients'.format(db) # # date = '2017-03-01' # # %load https://raw.githubusercontent.com/gisce/powerp-tools/master/get_cch_policies_without_tg_meter.py from erppeek import Client erp = Client(server=uri+":"+str(port), user=user, password=pwd, db=db) policies = [] policy_amendment_ids = erp.model('giscedata.polissa.modcontractual').search( [ ('data_inici', '=', date), ('tg', '=', 1) ], 0, None, None, {'active_test': False} ) if policy_amendment_ids: for policy_amendment in erp.model('giscedata.polissa.modcontractual').browse( policy_amendment_ids, ): meter_id = policy_amendment.polissa_id.comptadors_actius(date,date) meter = erp.model('giscedata.lectures.comptador').browse(meter_id) if meter.tg == False: policies.append(policy_amendment.polissa_id.name) print policy_amendment.polissa_id.name
# db = 'database' # user = '******' # pwd = 'pwd' # port = 8069 # uri = 'http://{0}.erp.clients'.format(db) # %load https://raw.githubusercontent.com/gisce/powerp-tools/master/profiles_assign_invoice.py from erppeek import Client erp = Client(server=uri+":"+str(port), user=user, password=pwd, db=db) invoices = erp.model('giscedata.facturacio.factura') profiles = erp.model('giscedata.perfils.perfil') search_params = [ ('state', 'in', ('open', 'paid')), ('invoice_id.journal_id.code', 'ilike', 'ENERGIA%') ] search_params_cancelling = search_params[:] search_params_cancelling.append( ('tipo_rectificadora', 'in' , ('R', 'A', 'B')) ) cancelling_invoice_ids = invoices.search(search_params_cancelling) if cancelling_invoice_ids: cancelling_invoices = invoices.read( cancelling_invoice_ids, ['ref'] ) cancelled_invoice_ids = [ x['ref'][0] for x in cancelling_invoices ]
amount_per_day = -0.008857 description = "Abonament del cobrament indegut del lloguer de comptador sense CCH durant el 2016" start_date = '2016-01-01' end_date = '2016-12-31' uos_id = 16 # ALQ/dia products_ids = [193] from erppeek import Client erp = Client(server=uri + ":" + str(port), user=user, password=pwd, db=db) for product_id in products_ids: line_ids = erp.model('giscedata.facturacio.factura.linia').search([ ('product_id', '=', product_id) ]) if line_ids: lines = erp.model('giscedata.facturacio.factura.linia').read( line_ids, ['factura_id', 'quantity', 'uos_id']) seen = set() for line in lines: invoice_id = line['factura_id'][0] if invoice_id in seen: raise Exception("More than one line per invoice") else: seen.add(invoice_id) invoices_data = {} for line in lines: