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)
예제 #3
0
 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
예제 #5
0
 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])
예제 #11
0
 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
예제 #13
0
 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
예제 #14
0
    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
예제 #16
0
    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))
예제 #18
0
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)
예제 #19
0
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)
예제 #23
0
 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)
예제 #24
0
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))
예제 #25
0
# 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
예제 #30
0
# -*- 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("----------------")
예제 #32
0

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)
예제 #33
0
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ó
예제 #36
0
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)
예제 #38
0
파일: __init__.py 프로젝트: gisce/spawn_oop
        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
예제 #42
0
# 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: