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
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
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
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'
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
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
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
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
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
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
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))
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
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
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
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
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', {})
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
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)
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
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
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', {})