public function enqueueAt($at, Job $job) { if ($job instanceof ContainerAwareJob) { $job->setKernelOptions($this->kernelOptions); } $this->attachRetryStrategy($job); \ResqueScheduler::enqueueAt($at, $job->queue, \get_class($job), $job->args); return null; }
public function put($name, array $arguments = [], array $options = []) { $queue = isset($options['queue']) ? $options['queue'] : $this->defaultQueue; $resqueArguments = ['name' => $name, 'arguments' => $arguments, 'kernel_options' => $this->kernelOptions]; $trackJobStatus = isset($options['track_status']) ? $options['track_status'] : $this->trackStatus; $id = null; if (isset($options['time'])) { $when = $options['time']; } elseif (isset($options['delay'])) { $when = time() + $options['delay']; } else { $when = null; } if (!$this->debug) { if ($when) { \ResqueScheduler::enqueueAt($when, $queue, \Mcfedr\ResqueQueueDriverBundle\Resque\Job::class, $resqueArguments, $trackJobStatus); } else { $id = \Resque::enqueue($queue, \Mcfedr\ResqueQueueDriverBundle\Resque\Job::class, $resqueArguments, $trackJobStatus); } } return new ResqueJob($resqueArguments, $id, $when, $queue, \Mcfedr\ResqueQueueDriverBundle\Resque\Job::class, $trackJobStatus); }
public function tearDown() { $current_datetime = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))); $id_notificacion = $this->args['id']; $this->db->sql('SELECT * FROM notificaciones WHERE id="' . $id_notificacion . '" AND tipo = 0'); $results = $this->db->getResult(); if (!empty($results[0])) { $data = json_decode($results[0]['data']); $fecha_creacion_notificacion = $results[0]['fecha_creacion']; $fecha_oportunidad = $this->args['fecha_oportunidad']; $fecha_ejecucion = $this->args['tiempo_ejecucion']; $tiempo = Subordinados1::get_recurrencia($fecha_creacion_notificacion, $fecha_ejecucion); $condicion = split(" ", $tiempo); echo 'poner notificaciones en redis' . PHP_EOL; switch ($data->tipo) { case 'nueva_oportunidad': if ($condicion[0] >= 24 && ($condicion[1] == 'dias' || $condicion[1] == 'minutos' || $condicion[1] == 'horas')) { $current_datetime = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . '24 hour')); $this->args['tiempo_ejecucion'] = $current_datetime; $datetime = new DateTime($current_datetime, new DateTimeZone('America/Panama')); ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $this->args); } break; case 'oportunidad_actualizar_etapa': if ($condicion[0] > 40 && ($condicion[1] == 'dias' || $condicion[1] == 'minutos' || $condicion[1] == 'horas')) { $current_datetime = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . '5 day')); $this->args['tiempo_ejecucion'] = $current_datetime; $datetime = new DateTime($current_datetime, new DateTimeZone('America/Panama')); ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $this->args); } break; } } Resque_Event::listen('afterPerform', function () { echo "Se ejecuto la tarea Notificaciones {$this->args}['id'] " . date('Y-m-d H:i:s') . PHP_EOL; }); Resque_Event::listen('onFailure', function () { echo "Algo paso :-| ...."; }); }
protected function enqueueFromConfig($config) { if (isset($config['cron'])) { //ResqueScheduler::removeDelayed($config['args']['queue'], $config['class'], $config['args']); $this->logger->log(Psr\Log\LogLevel::NOTICE, 'queueing {class} in {queue} Scheduled {schedule_at}', array('class' => $config['class'], 'queue' => $config['args']['queue'], 'schedule_at' => $config['schedule_at'])); ResqueScheduler::enqueueAt($config['schedule_at'], $config['args']['queue'], $config['class'], $config['args']); } else { $this->logger->log(Psr\Log\LogLevel::INFO, 'queueing {class} in {queue} [delayed]', array('class' => $config['class'], 'queue' => $config['queue'])); Resque_Event::trigger('beforeDelayedEnqueue', array('queue' => $config['queue'], 'class' => $config['class'], 'args' => $config['args'])); $payload = array_merge(array($config['queue'], $config['class']), $config['args']); call_user_func_array('Resque::enqueue', $payload); } }
/** * Create a new scheduled job and save it to the specified queue. * * @param timestamp $at UNIX timestamp when job should be executed. * @param string $queue The name of the queue to place the job in. * @param string $class The name of the class that contains the code to execute the job. * @param array $args Any optional arguments that should be passed when the job is executed. * * @return string */ public function enqueueJobAt($at, $queue, $class, $args = array()) { return ResqueScheduler::enqueueAt($at, $queue, $class, $args); }
/** * Guardar Formulario de Cliente Juridico * * @return boolean */ function guardar_actividad() { if (Util::is_array_empty($_POST)) { return false; } //Init Fieldset variable $fieldset = array(); //Remover el boton de submit que por default //viene con el valor "Guardar" unset($_POST["campo"]["guardar"]); $modulo_relacionado_con = $this->seleccionar_modulos_relacionado_con(array('valor' => $_POST['campo']['modulo_relacion'])); if (!isset($_POST["campo"]["uuid_cliente"])) { $uuid_cliente = $this->seleccionar_cliente_de_oportunidad($_POST["campo"]["uuid_oportunidad"]); //$uuid_cliente= $uuid_cliente[0]['uuid_cliente']; $fieldset["uuid_cliente"] = $uuid_cliente[0]['uuid_cliente']; } unset($_POST["campo"]["modulo_relacion"]); //Recorrer arreglo e insertar los valores que no estan vacios //en el fieldset foreach ($_POST["campo"] as $fieldname => $fieldvalue) { if (empty($fieldvalue)) { continue; } //check if is an array if (is_array($fieldvalue)) { foreach ($fieldvalue as $name => $value) { if ($value != "") { if (strpos($name, 'uuid_') !== false) { $fieldset["{$name} = UNHEX('{$value}')"] = NULL; } else { $fieldset[$name] = $this->security->xss_clean($value); } } } } else { if (strpos($fieldname, 'uuid_') !== false) { $this->db->set($fieldname, "UNHEX('{$fieldvalue}')", FALSE); } else { $fieldset[$fieldname] = $fieldvalue; } } } if (isset($_POST['campo']['completada'])) { if ($_POST['campo']['completada'] != 0 || $_POST['campo']['completada'] == "") { $fieldset["completada"] = 1; } else { $fieldset["completada"] = 0; } } else { $fieldset["completada"] = 0; } //Si el $fieldset es vacio if (Util::is_array_empty($fieldset)) { return false; } // // Begin Transaction // docs: https://ellislab.com/codeigniter/user-guide/database/transactions.html // $this->db->trans_start(); $fieldset["creado_por"] = $this->session->userdata('id_usuario'); $fieldset["fecha_creacion"] = date('Y-m-d H-i-s'); $fieldset["relacionado_con"] = $modulo_relacionado_con[0]['id_cat']; $fieldset["fecha"] = date('Y-m-d H:i:s', strtotime($fieldset["fecha"])); //Campos adicionales $this->db->set('uuid_actividad', 'ORDER_UUID(uuid())', FALSE); //Guardar Actividad $this->db->insert('act_actividades', $fieldset); $idActividad = $this->db->insert_id(); //--------------------------------------- //End Transaction $this->db->trans_complete(); $uuid_oportunidad = $_POST['campo']['uuid_oportunidad']; $uuid_tipo = $this->db->query("SELECT HEX(uuid_tipo_actividad) AS uuid_tipo,etiqueta FROM act_tipo_actividades WHERE etiqueta LIKE '%telefonica%'")->row_array(); $tipo_actividad = $_POST['campo']['uuid_tipo_actividad']; $oportunidades = $this->db->query("select count(uuid_oportunidad) as oportunidades from act_actividades where HEX(uuid_oportunidad) ='" . $uuid_oportunidad . "'")->row_array(); if ($this->is_redis_as_runnig && $oportunidades['oportunidades'] == 1 && $uuid_tipo['uuid_tipo'] != $tipo_actividad) { //armar datos $uuid_asignado = $_POST["campo"]["uuid_asignado"]; $creado_por = CRM_Controller::$uuid_usuario; $datosOportunidad = $this->db->query("Select id_oportunidad, nombre from opp_oportunidades where HEX(uuid_oportunidad) = '" . $uuid_oportunidad . "' ")->row_array(); $datos_notificaciones = array(); $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'tiene_oportunidad'); $datos_notificaciones['data'] = json_encode($data_notificacion); $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por); $args = array('id' => $notificacion['id']); $schedules = Jobs::mostrar_jobs(array('id_job' => 3)); $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia'])); $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama')); if (!empty($schedules)) { foreach ($schedules as $schedule) { $schedule_usuarios = json_decode($schedule['uuid_usuarios']); $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia'])); if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) { ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args); } else { ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args); } } } } if ($this->is_redis_as_runnig && $oportunidades['oportunidades'] >= 5) { $oportunidades = $this->db->query("select HEX(uuid_tipo_actividad) as uuid_tipo_actividad from act_actividades where HEX(uuid_oportunidad) ='" . $uuid_oportunidad . "' LIMIT 5")->result_array(); $tipo = $this->db->query("SELECT HEX(uuid_tipo_actividad) AS uuid_tipo FROM act_tipo_actividades WHERE etiqueta LIKE '%reunion%' OR etiqueta LIKE '%visita%'")->result_array(); $array5_opotunidad = array(); $array_tipo = array(); foreach ($oportunidades as $actividades) { array_push($array5_opotunidad, $actividades['uuid_tipo_actividad']); } foreach ($tipo as $actividades) { array_push($array_tipo, $actividades['uuid_tipo']); } $array_conciden = array_intersect($array5_opotunidad, $array_tipo); if (count($array_conciden) == 0) { //armar datos $uuid_asignado = $_POST["campo"]["uuid_asignado"]; $creado_por = CRM_Controller::$uuid_usuario; $datosOportunidad = $this->db->query("Select id_oportunidad, nombre from opp_oportunidades where HEX(uuid_oportunidad) = '" . $uuid_oportunidad . "' ")->row_array(); $datos_notificaciones = array(); $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'tiene_actividad'); $datos_notificaciones['data'] = json_encode($data_notificacion); $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por); $args = array('id' => $notificacion['id']); $schedules = Jobs::mostrar_jobs(array('id_job' => 7)); $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia'])); $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama')); if (!empty($schedules)) { foreach ($schedules as $schedule) { $schedule_usuarios = json_decode($schedule['uuid_usuarios']); $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia'])); if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) { ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args); } else { ResqueScheduler::enqueueAt($datetime, 'notificacion', 'Notificaciones', $args); } } } } } // Managing Errors if ($this->db->trans_status() === FALSE) { log_message("error", "MODULO: Actividades --> No se pudo guadar los datos de la actividad en DB."); return false; } else { /* Notifications::guardar_notificacion( array( "tipo_notificacion"=>'actualizacion', "modulo"=>$_POST['campo']['relacionado_con'], "id"=>$_POST['campo']['uuid_relacion'], ));*/ //guardar el id en variable de session $this->session->set_userdata('uuid_actividad', $idActividad); return true; } }
/** * Actualizar Etapa de Oportunidad * * @param string $id_cliente * @return boolean */ function ajax_actualizar_oportunidad($id_oportunidad = NULL) { $id_oportunidad = $this->input->post('id_oportunidad', true); $id_etapa = $this->input->post('id_etapa', true); //Si el $fieldset es vacio if (empty($id_oportunidad) || empty($id_etapa)) { return false; } // // Begin Transaction // docs: https://ellislab.com/codeigniter/user-guide/database/transactions.html // $this->db->trans_start(); $fieldset = array("id_etapa_venta" => $id_etapa); $clause = array("uuid_oportunidad = UNHEX('{$id_oportunidad}')" => NULL); //Actualizar Cliente Potencial $this->db->where($clause)->update('opp_oportunidades', $fieldset); //----------------- // Verificar si la etapa fue actualiza a Vendido //----------------- $fields = array("ocat.valor AS etapa_venta", "HEX(opp.uuid_propiedad) AS uuid_propiedad"); $clause = array("opp.uuid_oportunidad = UNHEX('{$id_oportunidad}')" => NULL); $checkEtapa = $this->db->select($fields)->distinct()->from('opp_oportunidades AS opp')->join('opp_oportunidades_cat AS ocat', 'ocat.id_cat = opp.id_etapa_venta', 'LEFT')->where($clause)->get()->result_array(); //----------------- // Obtener los Estados de las Propiedades //----------------- $listaEstadosPropiedades = $this->db->select("id_cat AS id_estado_propiedad")->distinct()->from('rpo_propiedades_cat')->where("valor", "no_disponible")->get()->result_array(); //verificar si la etapa fue actualiza a Vendido //si es vendido, cambiar la propiedad a No Disponible. if (!empty($checkEtapa) && !empty($checkEtapa[0]["etapa_venta"]) && $checkEtapa[0]["etapa_venta"] == "vendido") { //Actualizar Propiedad $fieldset = array("id_estado_propiedad" => $listaEstadosPropiedades[0]["id_estado_propiedad"]); $clause = array("uuid_propiedad = UNHEX('" . $checkEtapa[0]["uuid_propiedad"] . "')" => NULL); $this->db->where($clause)->update('rpo_propiedades', $fieldset); } //--------------------------------------- //End Transaction $this->db->trans_complete(); //redis if ($this->is_redis_as_runnig && ($checkEtapa[0]["etapa_venta"] != "vendido" && $checkEtapa[0]["etapa_venta"] != "venta_perdida")) { //verifica si el redis esta corriendo //armar datos $creado_por = CRM_Controller::$uuid_usuario; $datosOportunidad = $this->db->query("Select id_oportunidad, nombre, fecha_creacion,HEX(id_asignado) as id_asignado from opp_oportunidades where HEX(uuid_oportunidad) = '" . $id_oportunidad . "' ")->row_array(); $datos_notificaciones = array(); $data_notificacion = array('id_oportunidad' => $datosOportunidad['id_oportunidad'], 'nombre' => $datosOportunidad['nombre'], 'tipo' => 'oportunidad_actualizar_etapa', 'etapa' => $checkEtapa[0]["etapa_venta"]); $datos_notificaciones['data'] = json_encode($data_notificacion); $uuid_asignado = $datosOportunidad['id_asignado']; $notificacion = Notificaciones::guardar_notificaciones($datos_notificaciones, $uuid_asignado, $creado_por); $args = array('id' => $notificacion['id']); //$this->redis->publish('oportunidad',json_encode(array('id_asignado' =>$uuid_asignado, 'id_notificacion' => $notificacion['id'] ))); $schedules = Jobs::mostrar_jobs(array('id_job' => 2)); if (!empty($schedules)) { foreach ($schedules as $schedule) { $fecha_tarea = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s ') . $schedule['recurrencia'])); $datetime = new DateTime($fecha_tarea, new DateTimeZone('America/Panama')); $args = array_merge($args, array('id_job_conf' => $schedule['id'], 'oportunidad_id' => $datosOportunidad['id_oportunidad'], 'fecha_oportunidad' => $datosOportunidad['fecha_creacion'], 'tiempo_ejecucion' => $fecha_tarea, 'recurrencia' => $schedule['recurrencia'])); $schedule_usuarios = json_decode($schedule['uuid_usuarios']); if (in_array($uuid_asignado, $schedule_usuarios->uuid_usuarios)) { ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $args); } else { ResqueScheduler::enqueueAt($datetime, 'notificacion' . time(), 'Notificaciones', $args); } } } } // Managing Errors if ($this->db->trans_status() === FALSE) { log_message("error", "MODULO: Oportunidades --> No se pudo actualizar la etapa de la oportunidad en DB."); return array("respuesta" => false, "mensaje" => "Hubo un error al tratar de actualizar la etapa de la oportunidad."); } else { //Limpiar cache @CRM_Controller::$cache->delete("infoOportunidad"); @CRM_Controller::$cache->delete("listado_oportunidades"); return array("respuesta" => true, "mensaje" => "Se ha cambiado la etapa de la oportunidad satisfactoriamente."); } }
/** * Put a new job on a queue * * @param string $name The service name of the worker that implements {@link \Mcfedr\ResqueBundle\Worker\WorkerInterface} * @param array $options Options to pass to execute - must be json serializable * @param string $queue Optional queue name, otherwise the default queue will be used * @param \DateTime $when Optionally set a time in the future when this task should happen * @param boolean $trackStatus Set to true to be able to monitor the status of a job * @return JobDescription */ public function put($name, array $options = null, $queue = null, \DateTime $when = null, $trackStatus = false) { if ($this->debug) { return; } if (!$queue) { $queue = $this->defaultQueue; } $args = array_merge(['name' => $name, 'options' => $options], $this->kernelOptions); $trackJobStatus = $trackStatus || $this->trackStatus; if ($when) { \ResqueScheduler::enqueueAt($when, $queue, Job::class, $args, $trackJobStatus); return new JobDescription($when, $queue, Job::class, $args, $trackJobStatus); } else { $id = \Resque::enqueue($queue, Job::class, $args, $trackJobStatus); return new JobDescription(null, $queue, Job::class, $args, $trackJobStatus, $id); } }
/** * Create a new scheduled job and save it to the specified queue. * * @param timestamp $at UNIX timestamp when job should be executed. * @param string $queue The name of the queue to place the job in. * @param string $class The name of the class that contains the code to execute the job. * @param array $args Any optional arguments that should be passed when the job is executed. * @param bool $track_status Enable track status * * @return string */ public function enqueueJobAt($at, $queue, $class, $args = array(), $track_status = false) { return ResqueScheduler::enqueueAt($at, $queue, $class, $args, $track_status); }