コード例 #1
0
    def validate(obj):
        from core.exceptions.customexceptions import ApiException
        from core.vodafone.smart import smart_query

        validation = Validation()
        try:

            query_duplicateinstance = """ select sp.x_seq_instance 
										 from sa.table_site_part sp 
										 where sp.all_site_part2site = %s
										 and  (sp.part_status <> 'Desconectado' or (sp.service_end_dt = to_date('01/01/1753 00:00:00', 'dd/mm/yyyy HH24:MI:SS') or sp.service_end_dt > sysdate))
										 group by sp.x_seq_instance
										 having count(*) > 1 """ % (obj.objid)

            xSeqInstance = smart_query.my_custom_sql('smart_gg',
                                                     query_duplicateinstance)
            if (len(xSeqInstance) == 0):
                validation.setValues(0, "OK", "OK")
            else:
                validation.setValues(
                    -1, "Clientes con instancias duplicadas en parque",
                    "Clientes con instancias duplicadas en parque: %s" %
                    ",".join(
                        list(map(lambda x: x['x_seq_instance'],
                                 xSeqInstance))))

        except Exception as e:
            validation.setValues(-1, "InstanciasDuplicadas Exception", str(e))
        return validation
コード例 #2
0
    def validate(obj):
        from core.exceptions.customexceptions import ApiException
        from core.vodafone.smart import smart_query

        try:

            validation = Validation()

            if (obj.x_estado_cliente != 'Pend de Cambio'):
                validation.setValues(0, "OK", "OK")
            else:

                query_ClientPendingChange = """  select co.objid, co.order_status
												from sa.table_site st, sa.table_contract co, sa.table_contr_schedule cs
												where st.objid = %s 
												and st.x_estado_cliente = 'Pend de Cambio'
												and cs.ship_to2site = st.objid
												and co.objid = cs.schedule2contract
												and co.order_status in ('Abierta', 'Pend de Cancelar')
												Union 
												select co.objid, co.order_status
												from sa.table_site st, sa.table_contract co, sa.table_contr_schedule cs, sa.table_proc_inst pi , sa.table_process pc
												where st.objid = %s 
												and st.x_estado_cliente = 'Pend de Cambio'
												and cs.ship_to2site = st.objid
												and co.objid = cs.schedule2contract
												and co.order_status in ('Cerrada', 'Cancelada', 'Cerrada - No Valida')
												and pi.focus_lowid = co.objid
												and pi.proc_inst2process = pc.objid
												and pi.status <> 'COMPLETE'
												Union
												select co.objid, co.order_status
												from sa.table_site st, sa.table_contract co, sa.table_contr_schedule cs, sa.table_bpm_proc_inst proc
												where st.objid = %s 
												and st.x_estado_cliente = 'Pend de Cambio'
												and cs.ship_to2site = st.objid
												and co.objid = cs.schedule2contract
												and co.order_status in ('Cerrada', 'Cancelada', 'Cerrada - No Valida')
												and proc.focus_objid = co.objid
												and not (((proc.root_status = '0' or proc.root_status = '10') and (proc.status = '10')) or (proc.root_status = '15'))
												and proc.parent2proc_inst is null """ % (obj.objid, obj.objid,
                                                     obj.objid)

                clientPendingChange = smart_query.my_custom_sql(
                    'smart_gg', query_ClientPendingChange)
                if (len(clientPendingChange) != 0):
                    validation.setValues(0, "OK", "OK")
                else:
                    validation.setValues(
                        -1,
                        "Cliente en estado 'Pend de Cambio' sin orden en curso",
                        "Cliente en estado 'Pend de Cambio' sin orden en curso"
                    )

        except Exception as e:
            validation.setValues(-1, "ClientePendienteCambio Exception",
                                 str(e))

        return validation
コード例 #3
0
ファイル: analysis_case.py プロジェクト: maironburn/ADA
    def analyzeComments(text, site, comments):

        site_id = site.site_id if site else ""
        log.info('Start:analyzeComments site: ' + site_id)

        analysis_order_param = Appparameter.objects.get(
            name__iexact='Analysis comments priority')
        analysis_order = analysis_order_param.getParamaterDataValue()
        analysis_order.sort(key=lambda x: x['order'], reverse=False)

        if (site):

            #siteOrders = Contract.objects.raw('SELECT co.objid, co.s_id FROM table_contract co, table_contr_schedule cs where cs.ship_to2site=%s and co.objid=cs.schedule2contract order by co.create_dt desc ', [site.objid])

            query_contract_site = """SELECT co.objid, co.s_id 
                                FROM table_contract co, table_contr_schedule cs
                                WHERE cs.ship_to2site=%s 
                                AND co.objid=cs.schedule2contract order by co.create_dt desc """ % (
                site.objid)

            siteOrders = smart_query.my_custom_sql('smart_gg',
                                                   query_contract_site)

        else:
            siteOrders = []

        output = None

        if (text):
            for an in analysis_order:
                if (an['analysis'] == 'orders'):
                    output = AnalysisCase.analyzeCommentsOrders(
                        siteOrders, text, datetime.now())
                elif (an['analysis'] == 'exceptions'):
                    output = AnalysisCase.analyzeCommentsExceptions(
                        text, datetime.now())

                if (output):
                    break

        #Analyze the comments to search java exception, order or pattern
        for comment in reversed(comments):
            # Si ya hemos encontrado una coincidencia, no recorremos mas comentarios
            if (output):
                break

            for an in analysis_order:
                if (an['analysis'] == 'orders'):
                    output = AnalysisCase.analyzeCommentsOrders(
                        siteOrders, comment['text'], comment['date'])
                elif (an['analysis'] == 'exceptions'):
                    output = AnalysisCase.analyzeCommentsExceptions(
                        comment['text'], comment['date'])

                if (output):
                    break

        log.info('End:analyzeComments: output: ' + str(output))
        return output
コード例 #4
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def verifyWaitingAPM(contractObjid, statusProcessInstance, task):
        log.info('Start: verifyWaiting')
        if task['id'] == 'Fin Cierre Orden':
            query_cierre_orden = """ select  NVL(PC.X_CMB_CIERRE_ORDEN, 0) as x_cmb_cierre_orden,
                                            NVL(X_CMB_CANC_CIERRE_ORDEN, 0) as  x_cmb_canc_cierre_orden           
                                     from   SA.TABLE_X_PM_CONTRACT PC
                                    where   PC.X_PM2CONTRACT = %s""" % (
                contractObjid)

            query_cierre_orden_output = smart_query.my_custom_sql(
                'smart_gg', query_cierre_orden)
            if (len(query_cierre_orden_output) > 0):
                if (statusProcessInstance != "cancelling"):
                    esperaCierre = query_cierre_orden_output[0][
                        'x_cmb_cierre_orden']
                    statusWaiting = 'BLOCKING' if esperaCierre == 1 else 'NOBLOCKING'
                    return statusWaiting
                else:
                    esperaCierre = query_cierre_orden_output[0][
                        'x_cmb_canc_cierre_orden']
                    statusWaiting = 'BLOCKING' if esperaCierre == 1 else 'NOBLOCKING'
                    return statusWaiting

            else:
                return 'NOBLOCKING'

        elif task['id'] == 'Inicio Facturacion':
            query_ini_facturacion = """ select  NVL(PC.x_cmb_inic_facturacion, 0) as x_cmb_inic_facturacion
                                       from   SA.TABLE_X_PM_CONTRACT PC
                                       where   PC.X_PM2CONTRACT = %s""" % (
                contractObjid)
            query_ini_facturacion_output = smart_query.my_custom_sql(
                'smart_gg', query_ini_facturacion)
            if (len(query_ini_facturacion_output) > 0):
                ini_facturacion = query_ini_facturacion_output[0][
                    'x_cmb_inic_facturacion']
                statusWaiting = 'BLOCKING' if ini_facturacion == 1 else 'NOBLOCKING'
                return statusWaiting
            else:
                return 'NOBLOCKING'

        elif task['id'] == 'Fin Provision':
            return 'NOBLOCKING'
        else:
            return 'POTENTIAL'
コード例 #5
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def verifyCombine(contractObjid, processInstance, task, processes):
        log.info('Start: verifyCombine')

        list_processes = list(
            map(lambda x: "('" + x['id'] + "'," + str(x['version']) + ")",
                processes))
        list_processes_str = ",".join(list_processes)

        #Verificanos dependencias
        query_def_combine = """  select distinct X_PROCESS_ID, X_ACTION_ID, X_VERSION
                               from SA.TABLE_X_DEF_COMBINADOS C
                               where X_ACTION_ID = '%s' 
                               and X_PROCESS_ID <> '%s'
                               and (X_PROCESS_ID, X_VERSION) in (%s) """ % (
            task['id'], processInstance['id'], list_processes_str)

        query_def_combine_output = smart_query.my_custom_sql(
            'smart_gg', query_def_combine)
        if (len(query_def_combine_output) > 0):

            list_task_processes = list(
                map(
                    lambda x: "('" + x['x_action_id'] + "','" + x[
                        'x_process_id'] + "'," + str(x['x_version']) + ")",
                    query_def_combine_output))
            list_task_processes_str = ",".join(list_task_processes)

            query_verify_combine = """  select count(*) as numtask
                                        from sa.table_proc_inst pi, sa.table_process pc, sa.table_rqst_inst ri
                                        where pi.focus_lowid = %s
                                        and pi.proc_inst2process = pc.objid
                                        and pi.objid = ri.rqst_inst2proc_inst
                                        and (ri.id, pc.iD, pc.VERSION) in (%s)
                                        and ri.STATUS = 'COMPLETE'
                                        """ % (contractObjid,
                                               list_task_processes_str)
            query_verify_combine_output = smart_query.my_custom_sql(
                'smart_gg', query_verify_combine)
            data_combine = query_verify_combine_output[0]
            log.info('End: verifyCombine')
            return len(query_def_combine_output) != data_combine['numtask']

        log.info('End: verifyCombine')
        return True
コード例 #6
0
ファイル: analysis_onolog.py プロジェクト: maironburn/ADA
    def getOnologErrorRangeDates(contractObjid, processInstance, startDate,
                                 endDate):
        log.info('Start: getOnologErrorRangeDates')

        if (startDate.__class__.__name__ == 'datetime'):
            strStartDate = startDate.strftime('%Y-%m-%d %H:%M:%S')
        else:
            strStartDate = startDate

        if (endDate.__class__.__name__ == 'datetime'):
            strEndDate = endDate.strftime('%Y-%m-%d %H:%M:%S')
        else:
            strEndDate = endDate

        output = {}

        query_base_get_logs = """  select /*+ INDEX (logT NBS_ONOLOG2CONTRACT) */  rownum, logT.package, logT.procedure_name, logT.action,logT.sqlcode, logT.errmsg, logT.log_step, logT.comments, logT.process_instance, logT.time 
                                 from  sa.onolog logT
                                 where logT.contract= %s""" % (contractObjid)
        query_base_get_logs += " and  logT.time>=TO_DATE('%s', 'YYYY-MM-DD HH24:MI:SS') " % (
            strStartDate)
        query_base_get_logs += " and  logT.time<=TO_DATE('%s', 'YYYY-MM-DD HH24:MI:SS') " % (
            strEndDate)

        if (processInstance and processInstance != 0):
            query_base_get_logs += " and   (logT.process_instance IS NULL OR logT.process_instance= %s) " % (
                processInstance)

        #query_get_logs=  query_base_get_logs +  " and (logT.sqlcode != 0) and (logT.sqlcode is not null) "
        query_get_logs = query_base_get_logs + " order by logT.time desc "

        query_get_logs_output = smart_query.my_custom_sql(
            'smart_replica', query_get_logs)
        if (len(query_get_logs_output) > 0):
            record = query_get_logs_output[0]

            logs_to_analyze = list(
                filter(
                    lambda x: (x['time'] >=
                               (record['time'] - datetime.timedelta(seconds=10)
                                ) and x['rownum'] != record['rownum']),
                    query_get_logs_output))

            tmp = AnalysisOnolog.analyzeOnologRecords(record, logs_to_analyze)
            if (tmp):
                tmp.pop('rownum')
                log.info('End: getOnologErrorRangeDates')
                return tmp
            else:
                record.pop('rownum')
                log.info('End: getOnologErrorRangeDates')
                return record

        else:
            log.info('End: getOnologErrorRangeDates')
            return None
コード例 #7
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def verifyDependences(contractObjid, processInstance, task, processes):
        log.info('Start: verifyDependences')

        list_processes = list(map(lambda x: x['id'], processes))
        list_processes_str = "'" + "','".join(list_processes) + "'"

        #Verificanos dependencias
        query_def_dependencias = """select distinct x_proceso_hito, x_tarea_hito
                                    from sa.table_x_confproc_corp
                                    where x_proceso_dependiente = '%s'
                                    and x_tarea_dependiente = '%s' 
                                    and x_proceso_dependiente in (%s) """ % (
            processInstance['id'], task['id'], list_processes_str)
        query_def_dependencias_output = smart_query.my_custom_sql(
            'smart_replica', query_def_dependencias)
        if (len(query_def_dependencias_output) > 0):
            list_task_processes = list(
                map(
                    lambda x: "('" + x['x_tarea_hito'] + "','" +
                    x['x_proceso_hito'] + "')", query_def_dependencias_output))
            list_task_processes_str = ",".join(list_task_processes)

            query_verify_dependencias = """  select count(*) as numtask
                                            from sa.table_proc_inst pi, sa.table_process pc, sa.table_rqst_inst ri
                                            where pi.focus_lowid = %s
                                            and pi.proc_inst2process = pc.objid
                                            and pi.objid = ri.rqst_inst2proc_inst
                                            and (ri.id, pc.iD) in (%s)
                                            and ri.STATUS = 'COMPLETE'
                                        """ % (contractObjid,
                                               list_task_processes_str)
            query_verify_dependencias_output = smart_query.my_custom_sql(
                'smart_gg', query_verify_dependencias)
            data_dependencias = query_verify_dependencias_output[0]

            log.info('End: verifyDependences')
            return len(
                query_def_dependencias_output) != data_dependencias['numtask']

        log.info('End: verifyDependences')
        return True
コード例 #8
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getMOTOR(contract):
        log.info('Start: getMOTOR')

        query_processes_cpm = """select count(*) as numprocess
                            from  sa.table_proc_inst pi  
                            where  pi.focus_lowid = %s  
                            and    pi.focus_type = 86 """ % (
            contract.objid)  #focus_type igual a 86 e sun valor fijo

        query_processes_apm = """select count(*) as numprocess
                            from  sa.table_bpm_proc_inst pi 
                            where  pi.focus_objid = %s  
                            and pi.focus_table_num = 86 """ % (
            contract.objid)  #focus_type igual a 86 e sun valor fijo

        processes = smart_query.my_custom_sql('smart_gg', query_processes_apm)
        data_process = processes[0]
        if (data_process['numprocess'] > 0):
            log.info('End: getMOTOR')
            return Constantes.MOTOR_ORDER_APM
        else:
            processes = smart_query.my_custom_sql('smart_gg',
                                                  query_processes_cpm)
            data_process = processes[0]
            if (data_process['numprocess'] > 0):
                log.info('End: getMOTOR')
                return Constantes.MOTOR_ORDER_CPM
            else:
                try:
                    xclasorden = XClasOrden.objects.get(
                        objid=contract.x_contract2x_clas_orden)
                    if xclasorden.x_pm_engine == 1:
                        log.info('End: getMOTOR')
                        return Constantes.MOTOR_ORDER_APM
                    else:
                        log.info('End: getMOTOR')
                        return Constantes.MOTOR_ORDER_CPM

                except XClasOrden.DoesNotExist:
                    log.info('End: getMOTOR')
                    return Constantes.MOTOR_ORDER_CPM
コード例 #9
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getServiceRequest(taskStepObjid):
        log.info('Start: getServiceRequest')

        output = {}
        query_sr = """ select NVL(step.svc_name, '') as sr
                      from sa.table_bpm_step step
                      where step.objid = '%s'
                      and rownum = 1""" % (taskStepObjid)

        query_sr_output = smart_query.my_custom_sql('smart_gg', query_sr)
        if (len(query_sr_output) > 0):
            query_sr_def = """ select  NVL(def.description,'') as description, NVL(def.svc_name,'') as svc_name
                         from sa.table_rqst_def def
                         where upper(def.svc_name||'.'||def.svc_name) = upper('%s')
                         and rownum=1 """ % (query_sr_output[0]['sr'])

            query_sr_def_output = smart_query.my_custom_sql(
                'smart_replica', query_sr_def)

            if (len(query_sr_def_output) > 0):

                output['procedure'] = query_sr_def_output[0][
                    'description'].strip() if (
                        query_sr_def_output[0]['description']) else ''

                if (query_sr_def_output[0]['svc_name']
                        and query_sr_def_output[0]['svc_name'].strip() != ''):
                    output['service_request'] = query_sr_def_output[0][
                        'svc_name'].strip()
                else:
                    output['service_request'] = query_sr_output[0]['sr'].strip(
                    ) if (query_sr_output[0]['sr']) else ''
            else:
                output['service_request'] = query_sr_output[0]['sr'].strip(
                ) if (query_sr_output[0]['sr']) else ''

        log.info('End: getServiceRequest')

        return output
コード例 #10
0
    def validate(obj):
        from core.exceptions.customexceptions import ApiException
        from core.vodafone.smart import smart_query

        try:

            validation = Validation()

            query_CustomerTypologyProducts = """  select *
											from 
											(        
											  SELECT DECODE(datos.x_tipo_cliente, '*', 'VALIDO', CASE WHEN datos.x_tipo_clte=datos.TipoCltePartNum THEN 'VALIDO' ELSE 'NO VALIDO' END) as esValido, datos.*
											  FROM
											  (
											  SELECT pn.x_tipo_cliente, pn.part_number, s.x_tipo_clte, (SELECT x_codigo FROM table_x_pop_up p WHERE p.x_nombre_lista = 'ClaseCliente' and pn.x_tipo_cliente=p.x_des_larga and s.x_tipo_clte =p.x_codigo)  TipoCltePartNum
											  FROM   SA.TABLE_SITE_PART sp,
													 SA.TABLE_MOD_LEVEL ml,
													 SA.TABLE_PART_NUM pn,
													 SA.TABLE_SITE s
											  WHERE  1=1
											  and s.objid=%s
											  and sp.all_site_part2site=s.objid
											  and (sp.part_status <> 'Desconectado' or (sp.service_end_dt = to_date('01/01/1753 00:00:00', 'dd/mm/yyyy HH24:MI:SS') or sp.service_end_dt > sysdate))
											  AND sp.site_part2part_info = ml.objid
											  AND ml.PART_INFO2PART_NUM = pn.objid
											  and pn.part_number not in ('MEGTT')
											  ) datos
											) info
											where info.esValido='NO VALIDO'  """ % (obj.objid)

            customerTypologyProducts = smart_query.my_custom_sql(
                'smart_gg', query_CustomerTypologyProducts)
            if (len(customerTypologyProducts) != 0):
                validation.setValues(
                    -1,
                    "Clientes con productos incompatibles con la tipologia del cliente",
                    "Clientes con tipologia %s tiene los siguientes productos incompatibles: %s"
                    % (obj.x_tipo_clte, ",".join(
                        list(
                            map(lambda x: x['part_number'],
                                customerTypologyProducts)))))
            else:
                validation.setValues(0, "OK", "OK")

        except Exception as e:
            validation.setValues(-1, "TipologiaProductosCliente Exception",
                                 str(e))

        return validation
コード例 #11
0
    def clasifyContract(parameters):

        log.info('Start: clasifyContract')

        if (not parameters):
            raise ApiException("Invalid parameters.")

        if (not "inputOT" in parameters):
            raise ApiException("Invalid parameter. inputOT is mandatory")

        try:
            contract = Contract.objects.get(s_id=parameters["inputOT"])

        except Contract.DoesNotExist:
            raise ApiException("Invalid parameter. %s Contract not found" %
                               parameters["inputOT"])

        query_contract = """select c.s_id, c.title, c.s_title, st.site_id, NVL(clas.objid, '') as objidxclasorden, NVL(clas.x_clasificacion,'') as x_clasificacion, NVL(clas.x_descripcion,'') as x_descripcion 
                        from sa.table_contract c, 
                                sa.table_contr_schedule cs, 
                                sa.table_site st, 
                                sa.table_x_clas_orden clas
                        where c.s_id= '%s' 
                        and c.objid=cs.schedule2contract
                        and cs.ship_to2site=st.objid 
                        and clas.objid = c.x_contract2x_clas_orden """ % (
            contract.s_id)

        queryContract = smart_query.my_custom_sql('smart_gg', query_contract)
        if (len(queryContract) == 0):
            raise ApiException("Invalid parameters. Contract %s not found." %
                               contract.s_id)
        else:
            try:
                if ((not queryContract[0]["objidxclasorden"])
                        or (queryContract[0]["objidxclasorden"] == 0)):
                    return Clasification.TYPE_CONTRACT_NOT_DEFINED
                elif (queryContract[0]["title"].upper() !=
                      queryContract[0]["x_descripcion"].upper()):
                    return Clasification.TYPE_CONTRACT_WRONG_NAMED
                return Clasification.TYPE_CONTRACT_IN_PROGRESS

            except Exception as e:
                log.error('Exception:' + type(e).__name__ + " " + str(e))
                log.error(traceback.format_exc())
                raise ApiException(str(e))
コード例 #12
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getFault(objid, list_of_map):
        log.info('Start: getFault')

        if (objid):
            query_fault = """ select *
                        from sa.table_bpm_fault_info faultInfo
                        where objid = '%s' """ % (objid)

            query_fault_output = smart_query.my_custom_sql(
                'smart_gg', query_fault)
            if (len(query_fault_output) > 0):
                output = query_fault_output[0]
            else:
                output = None
        else:
            output = None

        log.info('End: getFault')

        return output
コード例 #13
0
	def validate(obj):
		from core.exceptions.customexceptions import ApiException
		from core.vodafone.smart import smart_query
		
		try:
		
		    validation=Validation()
		    
		    query_equipos= """ select sp.serial_no, eqMSISDN.x_numero_serie as MSISDN, eqSIM.x_numero_serie as SIM  
		                                        from sa.table_site_part sp
		                                             left join ( sa.table_x_equipos eqMSISDN) on (sp.serial_no=eqMSISDN.x_numero_serie and eqMSISDN.x_estado='5' and eqMSISDN.x_equipo2site=sp.all_site_part2site)
		                                             left join ( sa.table_x_equipos eqSIM) on (eqMSISDN.x_Parent2x_Equipo is not null and eqMSISDN.x_Parent2x_Equipo=eqSIM.objid and eqSIM.x_estado='5' and eqSIM.x_equipo2site=sp.all_site_part2site)
		                                        where sp.all_site_part2site = %s
		                                        and   sp.instance_name in ('MRPD1', 'MPPD2', 'MRPPR')
		                                        and  (sp.part_status <> 'Desconectado' or (sp.service_end_dt = to_date('01/01/1753 00:00:00', 'dd/mm/yyyy HH24:MI:SS') or sp.service_end_dt > sysdate))  """ % (obj.objid)
		                                            
		                                            
		    equipos=smart_query.my_custom_sql('smart_gg', query_equipos)
		    if (len(equipos)!=0):
		        msgs=[]
		        for equipo in equipos:
		            if equipo['msisdn']=='':
		                msgs.append('Servicio %s no esta correctamente asociado a un MSISDN en la tabla de equipos' % equipo['serial_no'])
		            elif equipo['sim']=='':
		                msgs.append('Servicio %s no esta correctamente asociado a una SIM en la tabla de equipos' % equipo['serial_no'])
		            else:
		                pass
		
		        if (len(msgs)!=0):
		            validation.setValues(-1,"Cliente con servicios incorrectamente asociados a equipos", "%s" % ",".join(msgs))
		        else:
		            validation.setValues(0,"OK", "OK")        
		
		    else:
		        validation.setValues(0,"OK", "OK")
		    
		except  Exception as e:
		    validation.setValues(-1,"VerificacionMovilEquipo Exception", str(e))
		
		return validation
コード例 #14
0
    def getValidations(contractObjid, searchDate):
        log.info('Start: getValidations')
        strSearchDate = searchDate.strftime('%Y-%m-%d %H:%M:%S')
        query_get_logs = """select *
                          from 
                          (
                            select detalle, entrada 
                            from sa.nbspm_processinstancescomb
                            where contract = %s
                            and entrada >= TO_DATE('%s', 'YYYY-MM-DD HH24:MI:SS')
                            order by entrada desc
                          )
                         where rownum=1""" % (contractObjid, strSearchDate)

        query_get_logs_output = smart_query.my_custom_sql(
            'smart_gg', query_get_logs)
        if (len(query_get_logs_output) > 0):
            log.info('End: getValidations')
            return query_get_logs_output[0]
        else:
            log.info('End: getValidations')
            return None
コード例 #15
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getServiceRequest(taskId):
        log.info('Start: getServiceRequest')

        output = {}
        query_sr_pl = """ select NVL(d.description, '') as PL, NVL(rq.svc_name, '') as SR
                                from SA.TABLE_SVC_RQST rq, sa.table_rqst_def d
                                where rq.id = '%s'
                                and d.svc_name = rq.svc_name
                                and rownum = 1""" % (taskId)

        query_sr_pl_output = smart_query.my_custom_sql('smart_replica',
                                                       query_sr_pl)
        if (len(query_sr_pl_output) > 0):
            pl = query_sr_pl_output[0]['pl']
            sr = query_sr_pl_output[0]['sr']
            if (len(sr) > 0):
                output['service_request'] = sr
            if (len(pl) > 0):
                output['procedure'] = pl

        log.info('End: getServiceRequest')

        return output
コード例 #16
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def verifyWaitingCondition(taskObjid, processInstance, contract):
        log.info('Start: verifyWaitingCondition')
        details = {}
        condition = ""
        query_condition = """select giLevel, fg.COND_PATH, fg.ITER_PATH, fg.ID, f.VALUE
                                from (select level as giLevel, gi.*
                                        from sa.table_group_inst gi
                                        start with gi.objid = (select ri.rqst_inst2group_inst
                                                                from sa.table_rqst_inst ri
                                                                where ri.objid = %s)
                                        connect by prior gi.child2group_inst = gi.objid) group_inst
                                inner join(sa.table_func_group fg) on (fg.objid = group_inst.group2func_group)
                                left join(sa.table_function f)     on (f.belongs2func_group=fg.objid)
                                order by giLevel ASC""" % (taskObjid)
        tasks = smart_query.my_custom_sql('smart_gg', query_condition)
        for task in tasks:
            if (('cond_path' in task) and (task['cond_path'])):
                condition = 'if ' + task['cond_path'].replace(
                    '$GroupInst:all_group_inst2proc_inst:', '')

                if (('value' in task) and (task['value'])
                        and (task['value'].strip() != '')):
                    condition += ' == ' + task['value']
                break
            elif (('iter_path' in task) and (task['iter_path'])):
                condition = 'while ' + task['iter_path'].replace(
                    '$GroupInst:all_group_inst2proc_inst:', '')
                break

        if (condition):
            details['message'] = condition
            details['value'] = None
            if (condition.strip() != ''):
                try:

                    if (('contract2x_pm_corp' in condition)
                            or ('proc_inst2x_pm_corp' in condition)):
                        fields = condition.split(':')
                        if (len(fields) > 1):
                            field = fields[1]
                            field_aux = field.split(' ')
                            field = field_aux[0] if (
                                len(field_aux) > 1) else field
                            query_details = """ select %s
                                            from sa.table_x_pm_corp 
                                            where x_pm_corp2proc_inst=%s """ % (
                                field, processInstance)
                            query_details_output = smart_query.my_custom_sql(
                                'smart_gg', query_details)
                            if (len(query_details_output) > 0):
                                #details['value']=query_details_output[0][field]
                                details[
                                    'value'] = 'table_x_pm_corp.' + field + ' : ' + str(
                                        query_details_output[0][field])
                    elif ('contract2x_pm' in condition):
                        fields = condition.split(':')
                        if (len(fields) > 1):
                            field = fields[1]
                            field_aux = field.split(' ')
                            field = field_aux[0] if (
                                len(field_aux) > 1) else field
                            query_details = """ select %s
                                            from sa.table_x_pm_contract 
                                            where x_pm2contract=%s """ % (
                                field, contract)
                            query_details_output = smart_query.my_custom_sql(
                                'smart_gg', query_details)
                            if (len(query_details_output) > 0):
                                #details['value']=query_details_output[0][field]
                                details[
                                    'value'] = 'table_x_pm_contract.' + field + ' : ' + str(
                                        query_details_output[0][field])
                except:
                    pass

            log.info('End: verifyWaitingCondition')
            return ('BLOCKING', details)
        else:
            if ('[M]' in tasks[-1]['id']):
                log.info('End: verifyWaitingCondition')
                return ('BLOCKING', {
                    'message': 'Manual Task',
                    'value': 'Manual Task'
                })
            log.info('End: verifyWaitingCondition')
            return ('NOBLOCKING', {})
コード例 #17
0
    def validate(obj):
        from core.exceptions.customexceptions import ApiException
        from core.vodafone.smart import smart_query

        try:

            validation = Validation()

            query_clienteNoPotencial = """ select count(*) from sa.table_site_part sp, sa.table_site st
							   where st.objid = %s
							   and sp.all_site_part2site = st.objid
							   and (sp.part_status <> 'Desconectado' or (sp.service_end_dt = to_date('01/01/1753 00:00:00', 'dd/mm/yyyy HH24:MI:SS') or sp.service_end_dt > sysdate))  """ % (
                obj.objid)

            clienteNoPotencial = smart_query.my_custom_sql(
                'smart_gg', query_clienteNoPotencial)
            if (len(clienteNoPotencial) != 0):

                query_tipoCliente = """   SELECT  DC.OBJID,S.SITE_ID ,DC.X_TIPO_AUX
												FROM SA.TABLE_CONTACT_ROLE CR, SA.TABLE_CONTACT C ,SA.TABLE_SITE S, SA.TABLE_X_DETALLE_CONTACTO DC
												WHERE CR.S_ROLE_NAME = 'TITULAR' 
												AND CR.X_CONTACT_TYPE = 'C' 
												AND CR.CONTACT_ROLE2SITE = NVL(S.X_CHILD_SITE2X_SITE, S.OBJID) 
												AND CR.CONTACT_ROLE2CONTACT = C.OBJID 
												AND C.CONTACT2X_DET_CONTACTO = DC.OBJID(+) 
												AND S.OBJID = %s  """ % (obj.objid)

                tipoCliente = smart_query.my_custom_sql(
                    'smart_gg', query_tipoCliente)
                if (len(tipoCliente) == 1):
                    if ((tipoCliente[0]['x_tipo_aux'])
                            and (tipoCliente[0]['x_tipo_aux'] != '')
                            and (tipoCliente[0]["x_tipo_aux"] != "OB")
                            and (tipoCliente[0]["x_tipo_aux"] != "EO")
                            and (tipoCliente[0]["x_tipo_aux"] != "EE")):
                        validation.setValues(
                            -1,
                            "El cliente no es ONO, no puede facturar MsjDetallado: Cliente con tipo de contacto incorrecto",
                            "El cliente no es ONO, no puede facturar MsjDetallado: Cliente con tipo de contacto incorrecto"
                        )
                    else:
                        validation.setValues(0, "OK", "OK")
                elif (len(tipoCliente) > 1):
                    validation.setValues(
                        -1,
                        "El cliente no es ONO, no puede facturar MsjDetallado: Cliente con mas de un contacto",
                        "El cliente no es ONO, no puede facturar MsjDetallado: Cliente con mas de un contacto"
                    )
                else:
                    validation.setValues(
                        -1,
                        "El cliente no es ONO, no puede facturar MsjDetallado: No hay informacion de contacto",
                        "El cliente no es ONO, no puede facturar MsjDetallado: No hay informacion de contacto"
                    )
            else:
                validation.setValues(0, "OK", "OK")

        except Exception as e:
            validation.setValues(-1,
                                 "VerificacionClienteFacturacion Exception",
                                 str(e))

        return validation
コード例 #18
0
ファイル: analysis_logs.py プロジェクト: maironburn/ADA
    def analyze(parameters) :

        log.info('Start: analyze')

        output=[]
        inputLogin=None
        inputOTHER=None

        if (not parameters):
            raise ApiException("Invalid parameters.")

        if (not "inputDate" in parameters or parameters["inputGAP"].strip()==""):
            inputDate=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        else:
            try:
                inputDate=datetime.strptime(parameters["inputDate"],'%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d %H:%M:%S')
            except Exception:
                raise ApiException("Invalid parameters. inputDate format must be yyyy-mm-dd Hh24:MI:SS")

        if (not "inputGAP" in parameters or parameters["inputGAP"].strip()==""):
            inputGap=10
        else:
            try:
                inputGap=int(parameters["inputGAP"])
            except Exception:
                raise ApiException("Invalid parameters. inputGap must be numeric value less than 180 minutes")
        
        if (inputGap > 180):
                    raise ApiException("Invalid parameters. inputGap must be numeric value less than 180 minutes")
        
        if (not "inputOT" in parameters or parameters["inputOT"].strip()=="") and (not "inputSite" in parameters or parameters["inputSite"].strip()==""):
            raise ApiException("Invalid parameters. inputOT or inputSite are mandatory")
        
        if ("inputOT" in parameters and parameters["inputOT"].strip()!=""):
                try:
                    contract=Contract.objects.get(s_id=parameters["inputOT"])
                except Contract.DoesNotExist: 
                    raise ApiException("Invalid parameters. %s Contract not found" % parameters["inputOT"])

        if ("inputSite" in parameters and parameters["inputSite"].strip()!=""):
                try:
                    site=Site.objects.get(site_id=parameters["inputSite"])
                except Site.DoesNotExist: 
                    raise ApiException("Invalid parameters. %s Site not found" % parameters["inputSite"])
        else:
            #Obtenemos el site de la contract
            query_site = """select s.site_id
                            from table_site s,
                                    table_contr_schedule cs,
                                    table_contract c
                            where c.s_id= '%s' 
                            and c.objid=cs.schedule2contract
                            and cs.ship_to2site=s.objid """ % (contract.s_id)

            querySite=smart_query.my_custom_sql('smart_gg', query_site)
            if (len(querySite)==0):
                raise ApiException("Invalid parameters. Site not found from contract %s" % contract.s_id)
            else:    
                try:
                    site=Site.objects.get(site_id=querySite[0]["site_id"])
                except  Site.DoesNotExist:   
                    raise ApiException("Invalid parameters. Site not found from contract %s" % contract.s_id)

        if ("inputLogin" in parameters and parameters["inputLogin"].strip()!=""):
            inputLogin=parameters["inputLogin"]
        if ("inputOTHER" in parameters and parameters["inputOTHER"].strip()!=""):
            inputOTHER=parameters["inputOTHER"]
        
        #Busqueda en SC_LOG
        strFilter="0=1"

        if (contract):
            strFilter=strFilter + " OR parameters like '%{0}%' ".format(contract.s_id)+ " OR parameters like '%{0}%' ".format(contract.objid)
        
        if (site):
            strFilter=strFilter + " OR parameters like '%{0}%' ".format(site.site_id)+ " OR parameters like '%{0}%' ".format(site.objid)

        if (inputLogin):
            strFilter=strFilter + " OR UPPER(parameters) like '%{0}%' ".format(inputLogin.upper())
        
        if (inputOTHER):
            strFilter=strFilter + " OR UPPER(parameters) like '%{0}%' ".format(inputOTHER.upper())
        
        strQuery="""SELECT  UPPER('table_x_sc_log') AS TABLENAME, PACKAGE AS  PACKAGE_NAME , '' AS   BATCHJOB,  '' AS  ACTION, PROCEDURE_FUNCTION AS PROCEDURE_NAME,  TIME, PARAMETERS  AS   PARAMETERS,   ''  AS SQL_CODE, '' AS  ERRMSG, '' AS   LOG_STEP , '' AS  COMMENTS,  '' AS  SEQ , '' AS   MENSAJE,  ''  AS CONTRACT_OBJID, '' AS   CONTRACT_ID  
                    FROM    table_x_sc_log
                    WHERE   time>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE  
                    AND     time<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE  """.format(inputDate, inputGap)
        
        strQuery=strQuery+ "AND ({0}) ".format(strFilter)

        query=smart_query.my_custom_sql('smart_replica', strQuery)
        output.extend(query)
        
        #busqueda en X_SC_ONOLOG
        strFilter="0=1"

        if (contract):
            strFilter=strFilter + " OR x_comments like '%{0}%' ".format(contract.s_id)+ " OR x_comments like '%{0}%' ".format(contract.objid)
            strFilter=strFilter + " OR x_contract like '%{0}%' ".format(contract.s_id)+ " OR x_contract like '%{0}%' ".format(contract.objid)
        
        if (site):
            strFilter=strFilter + " OR x_comments like '%{0}%' ".format(site.site_id)+ " OR x_comments like '%{0}%' ".format(site.objid)
            strFilter=strFilter + " OR x_id like '%{0}%' ".format(site.site_id)+ " OR x_id like '%{0}%' ".format(site.objid)

        if (inputLogin):
            strFilter=strFilter + " OR UPPER(x_comments) like '%{0}%' ".format(inputLogin.upper())
        
        if (inputOTHER):
            strFilter=strFilter + " OR UPPER(x_comments) like '%{0}%' ".format(inputOTHER.upper())
        
        strQuery="""SELECT UPPER('table_x_sc_onolog') AS TABLENAME, X_PACKAGE AS  PACKAGE_NAME , X_BATCHJOB AS   BATCHJOB, X_ACTION AS  ACTION, X_PROCEDURE_NAME  AS  PROCEDURE_NAME,  X_TIME AS TIME, '' AS   PARAMETERS,   to_char(X_SQLCODE)  AS SQL_CODE, X_ERRMSG AS  ERRMSG, X_LOG_STEP AS   LOG_STEP ,  X_COMMENTS AS  COMMENTS,  '' AS  SEQ , '' AS   MENSAJE,  to_char(X_CONTRACT)  AS CONTRACT_OBJID, '' AS   CONTRACT_ID  
                    FROM    table_x_sc_onolog
                    WHERE   x_time>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE 
                    AND     x_time<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE """.format(inputDate, inputGap)
        
        strQuery=strQuery+ "AND ({0}) ".format(strFilter)

        query=smart_query.my_custom_sql('smart_replica', strQuery)
        output.extend(query)

        #busqueda en ONOLOG
        strFilter="0=1"

        if (contract):
            strFilter=strFilter + " OR comments like '%{0}%' ".format(contract.s_id)+ " OR comments like '%{0}%' ".format(contract.objid)
            strFilter=strFilter + " OR contract like '%{0}%' ".format(contract.s_id)+ " OR contract like '%{0}%' ".format(contract.objid)
        
        if (site):
            strFilter=strFilter + " OR comments like '%{0}%' ".format(site.site_id)+ " OR comments like '%{0}%' ".format(site.objid)
            strFilter=strFilter + " OR id like '%{0}%' ".format(site.site_id)+ " OR id like '%{0}%' ".format(site.objid)

        if (inputLogin):
            strFilter=strFilter + " OR UPPER(comments) like '%{0}%' ".format(inputLogin.upper())
        
        if (inputOTHER):
            strFilter=strFilter + " OR UPPER(comments) like '%{0}%' ".format(inputOTHER.upper())
        
        strQuery="""SELECT UPPER('onolog') AS TABLENAME, PACKAGE AS  PACKAGE_NAME , BATCHJOB AS   BATCHJOB, ACTION AS  ACTION, PROCEDURE_NAME  AS    PROCEDURE_NAME,  TIME, '' AS   PARAMETERS,   to_char(SQLCODE)  AS SQL_CODE, ERRMSG AS  ERRMSG, LOG_STEP AS  LOG_STEP , COMMENTS AS  COMMENTS,  '' AS  SEQ , ''  AS   MENSAJE,  to_char(CONTRACT)  AS CONTRACT_OBJID, '' AS   CONTRACT_ID  
                    FROM    onolog
                    WHERE   time>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE 
                    AND     time<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE """.format(inputDate, inputGap)
        
        strQuery=strQuery+ "AND ({0}) ".format(strFilter)

        query=smart_query.my_custom_sql('smart_replica', strQuery)
        output.extend(query)


        #busqueda en TABLE_X_COC_RESTRICC_LOG
        strFilter="0=1"

        if (contract):
            strFilter=strFilter + " OR x_contract_objid='{0}' ".format(contract.objid)
        
        if (site):
            strFilter=strFilter + " OR x_site_objid='{0}' ".format(site.objid)
        
        strQuery="""SELECT UPPER('TABLE_X_COC_RESTRICC_LOG') AS TABLENAME, '' AS  PACKAGE_NAME , '' AS  BATCHJOB, '' AS ACTION, '' AS  PROCEDURE_NAME, X_LAST_UPDATE AS TIME, '' AS  PARAMETERS, ''  AS SQL_CODE, '' AS  ERRMSG, '' AS   LOG_STEP , '' AS  COMMENTS,  to_char(X_SEQ) AS  SEQ , X_MENSAJE AS   MENSAJE,  to_char(X_CONTRACT_OBJID)  AS CONTRACT_OBJID, '' AS   CONTRACT_ID  
                    FROM    TABLE_X_COC_RESTRICC_LOG
                    WHERE   x_last_update>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE  
                    AND     x_last_update<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE """.format(inputDate, inputGap)
        
        strQuery=strQuery+ "AND ({0}) ".format(strFilter)
        strQuery=strQuery+ "AND  x_mensaje <> 'OK' "

        query=smart_query.my_custom_sql('smart_replica', strQuery)
        output.extend(query)

        #busqueda en NBSPM_PROCESSINSTANCESCOMB
        #Solo se lanza si hay contract
        if (contract):
            strFilter=""
            strFilter=strFilter + " CONTRACT='{0}' ".format(contract.objid)
        
            strQuery="""SELECT UPPER('NBSPM_PROCESSINSTANCESCOMB') AS TABLENAME,  '' AS PACKAGE_NAME , '' AS  BATCHJOB, '' AS ACTION, ''  AS  PROCEDURE_NAME, ENTRADA AS TIME, '' AS  PARAMETERS, '' AS SQL_CODE, '' AS  ERRMSG, '' AS   LOG_STEP , '' AS  COMMENTS,  '' AS  SEQ , DETALLE AS   MENSAJE,  to_char(CONTRACT)  AS CONTRACT_OBJID, CONTRACT_ID AS  CONTRACT_ID  
                        FROM    NBSPM_PROCESSINSTANCESCOMB
                        WHERE   entrada>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE 
                        AND     entrada<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE  """.format(inputDate, inputGap)
            
            strQuery=strQuery+ "AND ({0}) ".format(strFilter)

            query=smart_query.my_custom_sql('smart_replica', strQuery)
            output.extend(query)


        #busqueda en TABLE_X_SC_TRAZAS_WS
        strFilter="0=1"

        if (contract):
            strFilter=strFilter + " OR x_traza like '%{0}%' ".format(contract.s_id)+ " OR x_traza like '%{0}%' ".format(contract.objid)
        
        if (site):
            strFilter=strFilter + " OR x_traza like '%{0}%' ".format(site.site_id)+ " OR x_traza like '%{0}%' ".format(site.objid)

        if (inputLogin):
            strFilter=strFilter + " OR UPPER(x_traza) like '%{0}%' ".format(inputLogin.upper())
        
        if (inputOTHER):
            strFilter=strFilter + " OR UPPER(x_traza) like '%{0}%' ".format(inputOTHER.upper())
        
        strQuery="""SELECT UPPER('TABLE_X_SC_TRAZAS_WS') AS TABLENAME, '' AS  PACKAGE_NAME , '' AS  BATCHJOB, X_XBEAN AS  ACTION, X_NAME_WS  AS  PROCEDURE_NAME, X_TIME AS TIME, '' AS   PARAMETERS,   ''  AS SQL_CODE, '' AS  ERRMSG, '' AS   LOG_STEP , X_TRAZA AS  COMMENTS,  '' AS  SEQ , '' AS   MENSAJE,  ''  AS CONTRACT_OBJID, '' AS   CONTRACT_ID  
                    FROM    TABLE_X_SC_TRAZAS_WS
                    WHERE   x_time>= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') - INTERVAL  '{1}' MINUTE  
                    AND     x_time<= to_date('{0}','yyyy-mm-dd Hh24:MI:SS') + INTERVAL  '{1}' MINUTE """.format(inputDate, inputGap)
        
        strQuery=strQuery+ "AND ({0}) ".format(strFilter)

        query=smart_query.my_custom_sql('smart_replica', strQuery)
        output.extend(query)


        return sorted(output, key=lambda k:k['time'], reverse=True)
コード例 #19
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getProcessInfo(contract):
        log.info('Start: getProcessInfo')
        processInfo = {}
        query_processes = """select pi.objid, pi.start_time, pi.end_time, pi.status, pi.focus_lowid, pi.proc_inst2process, pc.ID, pc.version, pi.exec_tag as process_user
                               from  sa.table_proc_inst pi , sa.table_process pc 
                               where  pi.focus_lowid = %s  
                               and pi.proc_inst2process = pc.objid """ % (
            contract.objid)

        processes = smart_query.my_custom_sql('smart_gg', query_processes)
        processInfo['num_processes'] = len(processes)
        processInfo['num_processes_completed'] = len(
            list(filter(lambda x: x['status'] == 'COMPLETE', processes)))
        if (processInfo['num_processes'] != 0):
            log.info('Analyizing contract:' + contract.s_id +
                     ' num_processes:' + str(processInfo['num_processes']) +
                     ' num_processes_completed:' +
                     str(processInfo['num_processes_completed']))
            if (processInfo['num_processes'] !=
                    processInfo['num_processes_completed']):
                pendingProcesses = []

                for processInstance in list(
                        filter(lambda x: x['status'] != 'COMPLETE',
                               processes)):
                    log.info('Analyizing contract:' + contract.s_id +
                             ' Process:' + str(processInstance['id']))
                    processInfo['process_id'] = processInstance['id']
                    processInfo['process_user'] = processInstance[
                        'process_user']
                    query_subprocesses = """select info.* 
                                            from 
                                                    ( select ri.objid, ri.start_time,ri.end_time,ri.status,ri.focus_lowid,
                                                    case 
                                                        when fg.id like '%s' then fg.id
                                                        when fg.id like '%s' then fg.id
                                                        else ri.id
                                                    end as taskid,
                                                    ri.id,
                                                    ri.rqst_inst2proc_inst, ri.rqst_inst2proc_inst as proc_inst, 
                                                    CASE WHEN to_char(ri.end_time,'yyyymmdd')='17530101' THEN SYSDATE+1000 ELSE  ri.end_time END AS FECHA_FIN
                                                    from sa.table_rqst_inst ri
                                                        left join (sa.table_group_inst gi) on (gi.objid = ri.rqst_inst2group_inst)
                                                        left join (sa.table_function fu) on ( fu.objid = gi.group2function)
                                                        left join (sa.table_func_group fg) on (fg.objid = fu.belongs2func_group)
                                                    where rqst_inst2proc_inst = %s
                                                    order by FECHA_FIN desc, ri.start_time desc, ri.objid desc
                                                    ) info
                                                where rownum=1""" % (
                        '%[C]%', '%Cancelacion%', processInstance['objid'])

                    tasks = smart_query.my_custom_sql('smart_gg',
                                                      query_subprocesses)
                    if (len(tasks) == 0):
                        log.info('Analyizing contract:' + contract.s_id +
                                 ' Process:' + str(processInstance['id']) +
                                 ' Task:None')
                        processInfo['task'] = None
                    else:
                        task = tasks[0]
                        log.info('Analyizing contract:' + contract.s_id +
                                 ' Process:' + str(processInstance['id']) +
                                 ' Task:' + str(task['taskid']))
                        task.pop('fecha_fin')
                        if (task['status'] == 'ERROR'):
                            log.info('Analyizing contract:' + contract.s_id +
                                     ' Process:' + str(processInstance['id']) +
                                     ' Task:' + str(task['taskid']) +
                                     ' Analysis:Error')
                            processInfo['task'] = task
                            processInfo[
                                'task_details'] = AnalysisContractCPM.getServiceRequest(
                                    task['id'])
                            break
                        elif (task['status'] == 'WAITING'):
                            (isBlockingTask,
                             task_details) = AnalysisContractCPM.verifyWaiting(
                                 contract.objid, processInstance, task,
                                 processes)
                            log.info('Analyizing contract:' + contract.s_id +
                                     ' Process:' + str(processInstance['id']) +
                                     ' Task:' + str(task['taskid']) +
                                     ' Analysis:' + isBlockingTask)
                            if (isBlockingTask == 'BLOCKING'):
                                processInfo['task'] = task
                                processInfo['task_details'] = task_details
                                processInfo['task_details'].update(
                                    AnalysisContractCPM.getServiceRequest(
                                        task['id']))
                                break
                            elif (isBlockingTask == 'POTENTIAL'):
                                processInfo['task'] = task
                                processInfo['task_details'] = task_details
                                processInfo['task_details'].update(
                                    AnalysisContractCPM.getServiceRequest(
                                        task['id']))
                            elif (isBlockingTask == 'NOBLOCKING'
                                  and not 'task' in processInfo):
                                processInfo['task'] = task
                                processInfo['task_details'] = task_details
                                processInfo['task_details'].update(
                                    AnalysisContractCPM.getServiceRequest(
                                        task['id']))
                        elif (task['status'] == 'COMPLETE'
                              or task['status'] == 'CANCELLED'):
                            log.info(
                                'Analyizing contract:' + contract.s_id +
                                ' Process:' + str(processInstance['id']) +
                                ' Task:' + str(task['taskid']) +
                                ' Analysis: Process not completed and tasks complete'
                            )
                            processInfo['task'] = task
                            processInfo[
                                'task_details'] = AnalysisContractCPM.getServiceRequest(
                                    task['id'])
                            break

                if ('task' in processInfo and processInfo['task']):
                    if task['status'] == 'WAITING':
                        validation = AnalysisProcessInstanceComb.getValidations(
                            contract.objid, task['start_time'])
                        if (validation):
                            processInfo['task_details'].update(
                                {'validation': validation})
                    elif task['status'] == 'ERROR':
                        error = AnalysisOnolog.getOnologError(
                            contract.objid, task['rqst_inst2proc_inst'],
                            task['start_time'], False)
                        if (error):
                            processInfo['task_details'].update(
                                {'error': error})

        log.info('End: getProcessInfo')
        return processInfo
コード例 #20
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def getProcessInfo(contract):
        log.info('Start: getProcessInfo')

        apmProcessInfo = {}
        #take the root states of APM process
        root_status_process_apm_param = Appparameter.objects.get(
            name__iexact='Root status process APM')
        root_status_process_apm = root_status_process_apm_param.getParamaterDataValue(
        )
        #take the root states of APM process
        status_process_apm_param = Appparameter.objects.get(
            name__iexact='Status process APM')
        status_process_apm = status_process_apm_param.getParamaterDataValue()
        #take the step states of APM process
        status_step_apm_param = Appparameter.objects.get(
            name__iexact='Step status APM')
        status_step_apm_param = status_step_apm_param.getParamaterDataValue()

        query_apm_processes = """ select name, status, root_status, objid, x_alt_objid, creation_time, assignee as process_user
                                from sa.table_bpm_proc_inst
                                where focus_objid = %s
                                and parent2proc_inst is null
                                order by creation_time desc """ % (
            contract.objid)

        apm_processes = smart_query.my_custom_sql('smart_gg',
                                                  query_apm_processes)
        apmProcessInfo['num_processes'] = len(apm_processes)
        numCompleted = 0
        #Obtenemos el número de procesos ejecutados.
        for item in apm_processes:
            if (AnalysisContractAPM.isAPMProcessCompleted(item)):
                numCompleted += 1

        apmProcessInfo['num_processes_completed'] = numCompleted

        #Una vez que hemos revisado los processos
        log.info('Analyizing contract APM:' + contract.s_id +
                 ' num_processes:' + str(apmProcessInfo['num_processes']) +
                 ' num_processes_completed:' +
                 str(apmProcessInfo['num_processes_completed']))
        if (apmProcessInfo['num_processes'] !=
                apmProcessInfo['num_processes_completed']):
            #Como no tiene todos los procesos completados, recorremos las tareas para ver cual es el problema
            #for processInstance in list(filter(lambda x: (x['status'] != 10 and x['root_status'] != 0), apm_processes)):
            for apmProcess in apm_processes:
                if (not AnalysisContractAPM.isAPMProcessCompleted(apmProcess)):
                    processInstance = apmProcess
                    log.info('Analyizing contract:' + contract.s_id +
                             ' Process:' + processInstance['name'])
                    apmProcessInfo['process_id'] = processInstance['name']
                    apmProcessInfo['process_user'] = processInstance[
                        'process_user']
                    query_subprocesses = """ select info.* 
                                            from
                                                (select objid as apm_objid, %s as focus_lowid, name as id, start_time, status_change_time, status, parent2proc_inst, root2proc_inst, step2step, x_alt_objid as objid, %s as proc_inst, curr_fault2fault_info
                                                from sa.table_bpm_step_inst
                                                where root2proc_inst='%s' 
                                                and x_alt_objid is not null
                                                order by x_alt_objid desc
                                                ) info
                                            where rownum<=2 """ % (
                        contract.objid, processInstance['x_alt_objid'],
                        processInstance['objid'])

                    tasks = smart_query.my_custom_sql('smart_gg',
                                                      query_subprocesses)
                    #Lo comneto porque no estoy seguro map(lambda x : x*2, tasks)
                    if (len(tasks) == 0):
                        log.info('Analyizing contract:' + contract.s_id +
                                 ' Process:' + str(processInstance['name']) +
                                 ' Task:None')
                    else:
                        task = tasks[0]
                        task['taskid'] = task['id']
                        log.info('Analyizing contract:' + contract.s_id +
                                 ' Process:' + str(processInstance['name']) +
                                 ' Task:' + str(task['id']))

                        task[
                            'status'] = AnalysisContractAPM.mapStepInstanceStatus(
                                task['status'], status_step_apm_param)
                        if (task['status'] != 'WAITING'):
                            break
                        else:
                            #Analizamos el tipo de WAITING
                            statusProcessInstance = AnalysisContractAPM.mapStepInstanceStatus(
                                processInstance['root_status'],
                                root_status_process_apm)
                            isBlockingTask = AnalysisContractAPM.verifyWaitingAPM(
                                contract.objid, statusProcessInstance, task)

                            log.info('Analyizing contract:' + contract.s_id +
                                     ' Process:' +
                                     str(processInstance['name']) + ' Task:' +
                                     str(task['id']) + ' Analysis:' +
                                     isBlockingTask)
                            if (isBlockingTask == 'BLOCKING'):
                                break
                            elif (isBlockingTask == 'POTENTIAL'):
                                pass

            if (not tasks):
                apmProcessInfo['task'] = None
            elif (len(tasks) == 0):
                apmProcessInfo['task'] = None
            else:
                task = tasks[0]
                log.info('Analyizing Details contract:' + contract.s_id +
                         ' Process:' + str(processInstance['name']) +
                         ' Task:' + str(task['id']))

                #El estado que tiene una tarea completada es 65 (finished)
                if (task['status'] != 'COMPLETE'):
                    log.info('Analyizing contract:' + contract.s_id +
                             ' Process:' + str(processInstance['name']) +
                             ' Task:' + str(task['id']) + ' Analysis:Error')
                    apmProcessInfo['task'] = task
                    apmProcessInfo[
                        'task_details'] = AnalysisContractAPM.getServiceRequest(
                            task['step2step'])

                    faultInfo = AnalysisContractAPM.getFault(
                        task['curr_fault2fault_info'], status_step_apm_param)

                    error = None
                    validation = None
                    if (faultInfo):
                        error = AnalysisOnolog.getOnologError(
                            contract.objid, processInstance['x_alt_objid'],
                            faultInfo['fault_time'], True)
                        validation = AnalysisProcessInstanceComb.getValidations(
                            contract.objid, faultInfo['fault_time'])
                    else:
                        if (tasks[1]):

                            #error=AnalysisOnolog.getOnologErrorRangeDates(contract.objid, processInstance['x_alt_objid'], tasks[1]['start_time'], task['start_time']+datetime.timedelta(seconds=10))
                            startDate = tasks[1]['start_time'] if tasks[1][
                                'start_time'] else tasks[1][
                                    'status_change_time']
                            endDate = task['start_time'] if task[
                                'start_time'] else task['status_change_time']
                            validation = AnalysisProcessInstanceComb.getValidations(
                                contract.objid, startDate)
                            error = AnalysisOnolog.getOnologErrorRangeDates(
                                contract.objid, processInstance['x_alt_objid'],
                                startDate,
                                endDate + datetime.timedelta(seconds=10))
                        else:
                            startDate = task['start_time'] if task[
                                'start_time'] else task['status_change_time']
                            endDate = task['start_time'] if task[
                                'start_time'] else task['status_change_time']
                            validation = AnalysisProcessInstanceComb.getValidations(
                                contract.objid, startDate)
                            error = AnalysisOnolog.getOnologErrorRangeDates(
                                contract.objid, processInstance['x_alt_objid'],
                                startDate - datetime.timedelta(seconds=1),
                                endDate + datetime.timedelta(seconds=10))

                    if (error):
                        apmProcessInfo['task_details']['error'] = error

                    if (validation):
                        apmProcessInfo['task_details'][
                            'validation'] = validation

        log.info('End: getProcessInfo')

        return apmProcessInfo
コード例 #21
0
ファイル: analysis_contract.py プロジェクト: maironburn/ADA
    def verifyWaiting(contractObjid, processInstance, task, processes):
        log.info('Start: verifyWaiting')
        if task['id'] == 'Fin Cierre Orden':
            query_cierre_orden = """ select  case
                                                when    x_fecha_cancelacion is not null 
                                                    and to_char(x_fecha_cancelacion,'yyyymmdd')<>'17530101' then  'CANCELLING'
                                                else   'INPROGRESS'
                                            end AS status,
                                            NVL(PC.X_CMB_CIERRE_ORDEN, 0) as x_cmb_cierre_orden,
                                            NVL(X_CMB_CANC_CIERRE_ORDEN, 0) as  x_cmb_canc_cierre_orden           
                                     from   SA.TABLE_X_PM_CONTRACT PC
                                    where   PC.X_PM2CONTRACT = %s""" % (
                contractObjid)
            query_cierre_orden_output = smart_query.my_custom_sql(
                'smart_gg', query_cierre_orden)
            if (len(query_cierre_orden_output) > 0):
                if (query_cierre_orden_output[0]['status'] == 'INPROGRESS'):
                    esperaCierre = query_cierre_orden_output[0][
                        'x_cmb_cierre_orden']
                    statusWaiting = 'BLOCKING' if esperaCierre == 1 else 'NOBLOCKING'
                    return (statusWaiting, {
                        'message':
                        'table_x_pm_contract.x_cmb_cierre_orden = 1',
                        'value':
                        'table_x_pm_contract.x_cmb_cierre_orden : ' +
                        str(esperaCierre)
                    })
                else:
                    esperaCierre = query_cierre_orden_output[0][
                        'x_cmb_canc_cierre_orden']
                    statusWaiting = 'BLOCKING' if esperaCierre == 1 else 'NOBLOCKING'
                    return (statusWaiting, {
                        'message':
                        'table_x_pm_contract.x_cmb_canc_cierre_orden = 1',
                        'value':
                        'table_x_pm_contract.x_cmb_canc_cierre_orden : ' +
                        str(esperaCierre)
                    })

            else:
                return ('NOBLOCKING', {
                    'message':
                    'table_x_pm_contract.x_cmb_cierre_orden = 1',
                    'value':
                    'table_x_pm_contract.x_cmb_cierre_orden : null'
                })
        elif task['id'] == 'Inicio Facturacion':
            query_ini_facturacion = """ select  NVL(PC.x_cmb_inic_facturacion, 0) as x_cmb_inic_facturacion
                                       from   SA.TABLE_X_PM_CONTRACT PC
                                       where   PC.X_PM2CONTRACT = %s""" % (
                contractObjid)
            query_ini_facturacion_output = smart_query.my_custom_sql(
                'smart_gg', query_ini_facturacion)
            if (len(query_ini_facturacion_output) > 0):
                ini_facturacion = query_ini_facturacion_output[0][
                    'x_cmb_inic_facturacion']
                statusWaiting = 'BLOCKING' if ini_facturacion == 1 else 'NOBLOCKING'
                return (statusWaiting, {
                    'message':
                    'table_x_pm_contract.x_cmb_inic_facturacion = 1',
                    'value':
                    'table_x_pm_contract.x_cmb_inic_facturacion : ' +
                    str(ini_facturacion)
                })
            else:
                return ('NOBLOCKING', {
                    'message':
                    'table_x_pm_contract.x_cmb_inic_facturacion = 1',
                    'value':
                    'table_x_pm_contract.x_cmb_inic_facturacion :null'
                })


#X_CMB_CANC_CIERRE_ORDEN
        elif task['id'] == 'Fin Provision':
            return ('NOBLOCKING', {})
        else:
            #Verificanos dependencias
            if (not AnalysisContractCPM.verifyDependences(
                    contractObjid, processInstance, task, processes)):
                return ('BLOCKING', {
                    'message':
                    'Error Task waiting but dependent tasks are completed',
                    'value':
                    'Error Task waiting but dependent tasks are completed'
                })

            #Verificamos combinados
            if (not AnalysisContractCPM.verifyCombine(
                    contractObjid, processInstance, task, processes)):
                return ('BLOCKING', {
                    'message':
                    'Error Task waiting but combined tasks are completed',
                    'value':
                    'Error Task waiting but combined tasks are completed'
                })

            (isBlockingTask,
             task_details) = AnalysisContractCPM.verifyWaitingCondition(
                 task['objid'], processInstance['objid'], contractObjid)
            if (isBlockingTask == 'BLOCKING'):
                return (isBlockingTask, task_details)
            else:
                return ('POTENTIAL', {})