/** * validateDemo($token) * * Crear una nueva instancia(Instalacion de Caffeina POS) con vigencia de 30 dias * * @author Alan Gonzalez Hernandez<*****@*****.**>, Juan Manuel García Carmona <*****@*****.**> * @param string token token de la supuesta instancia que validaremos * @return array arreglo sociativo que contiene informacion sobre la respeusta response->success indica si termino con exito o fracaso (boolean), response->reason en caso de que exista algun error aqui se indica la información **/ public static function validateDemo($token) { global $POS_CONFIG; Logger::log("Somebody requested validate: token: " . $token); //busquemos ese token en la bd $sql = "select id_request, date_validated, email from instance_request where token = ? "; $res = $POS_CONFIG["CORE_CONN"]->GetRow($sql, array($token)); if (empty($res)) { //ya solicito la instancia Logger::error("Este token no existe !"); return array("success" => false, "reason" => "No existe esta llave de solicitud."); } if (!is_null($res["date_validated"])) { Logger::warn("este ya fue validado"); return array("success" => false, "reason" => "Esta llave de solicitud ya ha sido creada. Para acceder a ella haga click <a href=\"http://pos2.labs2.caffeina.mx/front_ends/" . $token . "/\">aqui</a>."); } $startTime = time(); $iid = self::Nueva($token, $res["email"] . " requested this instance as a demo"); Logger::log("Sending email...."); $cuerpo = "Su nueva instancia de POS ERP ha sido creada con exito !\n\n"; $cuerpo .= "Puede acceder a su cuenta en la siguiente direccion:"; $cuerpo .= "\n\nhttp://pos2.labs2.caffeina.mx/front_ends/" . $token . "/"; $cuerpo .= "\n\nHemos creado una cuenta de aministrador para usted, el usuario es: `1` y su contraseƱa es `123` sin las comillas."; //enviar el correo electronico POSController::EnviarMail($cuerpo, $res["email"], "Su cuenta POS ERP esta lista"); $sql = "UPDATE `instance_request` SET `date_validated` = ?, `date_installed` = ? WHERE `id_request` = ?;"; $POS_CONFIG["CORE_CONN"]->Execute($sql, array($startTime, time(), $res["id_request"])); Logger::log("Done with installation."); return array("success" => true, "reason" => "Su instancia se ha creado con exito."); }
protected function GenerateResponse() { try { $this->response = POSController::EnviarMail(isset($_POST['cuerpo']) ? $_POST['cuerpo'] : null, isset($_POST['destinatario']) ? $_POST['destinatario'] : null, isset($_POST['titulo']) ? $_POST['titulo'] : null, isset($_POST['emisor']) ? $_POST['emisor'] : "*****@*****.**"); } catch (Exception $e) { //Logger::error($e); throw new ApiException($this->error_dispatcher->invalidDatabaseOperation($e->getMessage())); } }
/** * *Una nueva orden de servicio a prestar. Este debe ser un servicio activo. Y prestable desde la sucursal desde donde se inicio la llamada. Los conceptos a llenar estan definidos por el concepto. Se guardara el id del agente que inicio la orden y el id del cliente. La fecha se tomara del servidor. * * @param id_cliente int Id del cliente que contrata el servicio * @param id_servicio int Id del servicio que se contrata * @param fecha_entrega string Fecha en que se entregara el servicio. * @param descripcion string Descripcion de la orden o el porque del servicio * @param adelanto float Adelanto de la orden * @return id_orden int Id de la orden que se creo. **/ public static function NuevaOrden($id_cliente, $id_servicio, $adelanto = null, $cliente_reporta = null, $condiciones_de_recepcion = null, $descripcion = "", $extra_params = null, $fecha_entrega = "", $fotografia = null, $id_usuario_asignado = null, $precio = null) { Logger::log("Creando nueva orden de servicio..."); Logger::log(" id_servicio=" . $id_servicio); Logger::log(" id_cliente =" . $id_cliente); //Se obtiene al usuario de la sesion actual $s = SesionController::Actual(); if (is_null($s)) { Logger::error("No se ha podido obtener al usuario de la sesion. Ya inicio sesion?"); throw new AccessDeniedException("No se ha podido obtener al usuario de la sesion."); } $id_usuario = $s["id_usuario"]; $cliente = UsuarioDAO::getByPK($id_cliente); $saldo_cliente = $cliente->getSaldoDelEjercicio(); //se trae el monto que le resta por disponer de su limite de credito /* if( $saldo_cliente < $precio ) throw new InvalidDataException("El saldo del cliente es insuficiente ($ {$saldo_cliente})"); */ //Valida que los datos sean correctos $validar = self::validarParametrosOrdenDeServicio(null, $id_servicio, $id_cliente, $descripcion, null, $adelanto); //Si no se recibe adelanto se toma como cero if (is_null($adelanto)) { $adelanto = 0; } else { if ($adelanto < 0) { throw new InvalidDataException("No es un valor de adelanto valido"); } } if ($adelanto > $precio) { throw new InvalidDataException("El monto del adelanto rebaza el monto del servicio"); } $servicio = ServicioDAO::getByPK($id_servicio); if (is_null($servicio)) { throw new InvalidDataException("Este servicio no existe"); } $subtotal = 0; if ($servicio->getMetodoCosteo() == "variable") { if (is_null($precio)) { throw new InvalidDataException("Este servicio es de precio variable y no se envio el precio"); } if ($precio < 0) { throw new InvalidDataException("{$precio} no es un precio valido, es menor a 0"); } $subtotal = $precio; } else { $subtotal = $servicio->getPrecio(); if (is_null($subtotal)) { Logger::error("el precio de este servicio esta mal!"); $subtotal = 0; } } /* //Figu: al llegar a este punto si tiene el saldo de la venta, pero se valida aun asi que su limite de credito cubra ese subtotal //esto por si en algun momento se actualiza el limite de credito del cliente (que el admin del sis le decremente su limite por cualquier razon) if(UsuarioDAO::getByPK($id_cliente)->getLimiteCredito() < $subtotal){ throw new BusinessLogicException("El limite de credito no cubre este monto"); } */ //Se inicializa el registro de orden de servicio $orden_de_servicio = new OrdenDeServicio(array("id_servicio" => $id_servicio, "id_usuario_venta" => $id_cliente, "id_usuario" => $id_usuario, "fecha_orden" => time(), "fecha_entrega" => $fecha_entrega, "activa" => 1, "cancelada" => 0, "descripcion" => $descripcion, "adelanto" => $adelanto, "precio" => $subtotal)); //ok, ya tengo el servicio, vamos a ver si necesito parametros extra if (!is_null($servicio->getExtraParams())) { Logger::log("El servicio require parametros extra."); //si se necesitan, vamos a ver cuales son, $extra_params_sent = $extra_params; $extra_params_required = json_decode($servicio->getExtraParams()); //no se enviaron los parametros extra? if (is_null($extra_params_sent)) { Logger::warn("no se enviaron parametros extra"); } foreach ($extra_params_required as $epr) { Logger::log("Extraparam:" . $epr->desc); } $orden_de_servicio->setExtraParams(json_encode($extra_params)); } DAO::transBegin(); try { Logger::log("Insertando la orden de servicio...."); $orden = OrdenDeServicioDAO::save($orden_de_servicio); } catch (Exception $e) { DAO::transRollback(); Logger::error($e->getMessage()); throw new InvalidDatabaseOperationException("No se pudo crear la nueva orden de servicio"); } $s = SesionController::Actual(); //proceder a insertar venta a credito para este servicio /* */ DAO::transEnd(); Logger::log("Orden de servicio creada exitosamente:"); Logger::log("\torden de servicio=" . $orden_de_servicio->getIdOrdenDeServicio()); //ok, ya se hizo correctamente, vamos a ver si le enviamos correo al cliente if (!is_null($cliente->getCorreoElectronico())) { Logger::log("enviando correo a " . $cliente->getCorreoElectronico()); $servicio = ServicioDAO::getByPK($id_servicio); $cuerpo = "Estimado " . $cliente->getNombre() . "\n\n" . "Le escribimos para informale que su orden de servcio " . "numero " . $orden_de_servicio->getIdOrdenDeServicio() . " " . "referente a " . $servicio->getNombreServicio() . " " . "esta siendo procesada y usted puede revisar su estatus en " . "cualquier momento mediante nuestra pagina web en: \n\n" . "http://pos2.labs2.caffeina.mx/front_ends/" . INSTANCE_TOKEN . "/?from=email"; $destinatario = $cliente->getCorreoElectronico(); $titulo = "Su orden de servicio "; POSController::EnviarMail($cuerpo, $destinatario, $titulo); } return array("id_orden" => (int) $orden_de_servicio->getIdOrdenDeServicio()); }