/** * Devuelve un array con los módulos que están sujetos a gestión * de etiquetas, según el valor de la variable de entorno del proyecto 'modulosConEtiquetas' * * El array tendrá n elementos (tantos como módulos), y cada elemento es: * * - Id => el id del módulo * - Value => el título del módulo (no el nombre) * * @return array */ public function getModulosConEtiquetas() { $modulos = array(); $variables = new CpanVariables('Pro', 'Env'); $modulosConEtiquetas = explode(",", trim($variables->getNode('modulosConEtiquetas'))); unset($variables); $objetoModulo = new CpanModulos(); foreach ($modulosConEtiquetas as $moduloConEtiquetas) { $modulo = $objetoModulo->find('NombreModulo', trim($moduloConEtiquetas)); $modulos[] = array('Id' => $modulo->getId(), 'Value' => $modulo->getTitulo()); } unset($objetoModulo); unset($modulo); return $modulos; }
public function actualiza($objeto) { $entidad = $objeto->getClassName(); $idEntidad = $objeto->getPrimaryKeyValue(); $this->queryDelete("Entity='{$entidad}' and IdEntity='{$idEntidad}'"); if ($objeto->getPublish()->getIDTipo() == '1' and $objeto->getDeleted()->getIDTipo() == '0') { $variables = new CpanVariables("Mod", "Env", $entidad); foreach ($variables->getNode("columns") as $columna => $atributos) { if ($atributos['searchable']) { $texto = $objeto->{"get{$columna}"}(); if ($texto) { $search = new CpanSearch(); $search->setTexto($texto); $search->setEntity($entidad); $search->setIdEntity($idEntidad); $search->setPublish($objeto->getPublish()->getIDTipo()); $search->setChecked($objeto->getChecked()->getIDTipo()); $search->setPrivacy($objeto->getPrivacy()->getIDTipo()); $search->create(); } } } } }
$search->actualiza($objeto); unset($search); } } unset($objeto); // Actualiza la columna en el resto de idiomas if ($_SESSION['idiomas']['actual'] == 0) { // Recorro los idiomas adicionales foreach ($_SESSION['idiomas']['disponibles'] as $key => $value) { if ($key > 0) { $_SESSION['idiomas']['actual'] = $key; $objeto = new $entidad($idEntidad); $objeto->{"set{$columna}"}($v['valor']); if ($objeto->save() && ($columna == 'Publish' || $columna == 'Privacy')) { // Actualiza la url amigable $urlAmigable = CpanUrlAmigables::sincroniza($objeto); // Actualiza la tabla de búsquedas $variables = new CpanVariables("Mod", "Env", $entidad); if ($variables->getNode('searchable')) { $search = new CpanSearch(); $search->actualiza($objeto); unset($search); } } unset($objeto); } } $_SESSION['idiomas']['actual'] = 0; } $tag = ""; echo $tag;
/** * Pone las variables de entorno del proyecto/app/modulo en curso * relativas al control de visibilidad de sus variables web * * Respeta los valores que hubiera en el yml del proyecto respecto * a las variables web definidas. * * @return void */ private function ponVisibilidad() { $variables = new CpanVariables($this->_objeto['ambito'], 'Env', $this->_objeto['nombre']); $valoresActuales = $variables->getNode('showVarWeb'); $valores['globales'] = array(); $valores['especificas'] = array(); if (is_array($this->_objeto['datos']['globales'])) { foreach ($this->_objeto['datos']['globales'] as $key => $value) { if (!isset($valoresActuales['globales'][$key])) { $valores['globales'][$key] = 0; } else { $valores['globales'][$key] = $valoresActuales['globales'][$key]; } } } if (is_array($this->_objeto['datos']['especificas'])) { foreach ($this->_objeto['datos']['especificas'] as $key => $value) { if (!isset($valoresActuales['especificas'][$key])) { $valores['especificas'][$key] = 0; } else { $valores['especificas'][$key] = $valoresActuales['especificas'][$key]; } } } $variables->setNode('showVarWeb', $valores); $variables->save(); unset($variables); }
/** * Muestra el formulario de mantenimineto de las variables de entorno y web * a nivel global, de app, o de módulo, dependiendo de los valores GET request. * * La posicion 1 del request indica el tipo de variable. Valores posibles: * * Web : Variables web * Env : Variables entorno * * La posicion 2 del request indica el ámbito. Valores posibles: * * Pro: para las variables de entorno globales al projecto * App: para las variables de entorno de un aplicación * Mod: para las variables de entorno de un modulo * * Si la posicion 2 es 'App' ó 'Mod', la posición 3 del request indica * el nombre de la aplicación o del módulo * * Si no viene nada en el request, no se mostrar * @return array Array(template,values) */ public function indexAction($ambito = '', $tipo = '', $nombre = '') { if ($tipo == '') { $tipo = $this->request[1]; } if ($tipo == '') { $tipo = 'Env'; } if ($ambito == '') { $ambito = $this->request[2]; } if ($ambito == '') { $ambito = 'Pro'; } if ($nombre == '') { $nombre = $this->request[3]; } // PUEDE VER LAS VARIABLES DE ENTORNO Y WEB ÚNICAMENTE SI ES DE PERFIL 1 // PUEDE VER LAS VARIABLES WEB SI TIENE PERMISO $idPerfil = $_SESSION['usuarioPortal']['IdPerfil']; $permiso = ($idPerfil == '1' or $tipo == 'Web' and $this->values['permisos']['permisosModulo']['VW']); if ($permiso) { $this->variables = new CpanVariables($ambito, $tipo, $nombre); $this->values['errores'] = array_merge((array) $this->values['errores'], (array) $this->variables->getErrores()); $datos = $this->variables->getValores(); switch ($ambito) { case 'Pro': $this->ponValoresDefecto($ambito, $tipo, '', $datos); if ($tipo == 'Web') { // Coger la visibilidad de las variables web $var = new CpanVariables($ambito, 'Env'); $this->values['visibilidad'] = $var->getNode('showVarWeb'); unset($var); } break; case 'App': $this->ponValoresDefecto($ambito, $tipo, $nombre, $datos); // Variables especificas $datos['especificas'] = $this->getEspecificas($datos['especificas']); break; case 'Mod': $this->ponValoresDefecto($ambito, $tipo, $nombre, $datos); switch ($tipo) { case 'Env': // Constuyo array con los nombres de las columnas del modulo(=entidad) // para mostrar en el template las variables Web/Env de cada columna. $archivoConfig = new Form($nombre); $columnasConfig = $archivoConfig->getNode('columns'); unset($archivoConfig); // Creo el nodo 'columns' creando si no existen o asignado valores por defecto si no tienen // provinientes del 'config.yml' de cada módulo // SI SE AÑADE UNA COLUMNA NUEVA EN config.yml TAMBIEN SERÁ AÑADIDA EN EL FORMULARIO DE VARIABLES if (is_array($columnasConfig)) { foreach ($columnasConfig as $columnaConfig => $atributosConfig) { $valoresActuales = $datos['columns'][$columnaConfig]; $datos['columns'][$columnaConfig] = $this->ponAtributos((array) $valoresActuales, $atributosConfig); } } break; case 'Web': // Coger la visibilidad de las variables web $var = new CpanVariables($ambito, 'Env', $nombre); $this->values['visibilidad'] = $var->getNode('showVarWeb'); unset($var); break; } // Variables especificas $datos['especificas'] = $this->getEspecificas($datos['especificas']); // Valores para el desplegable de columnas if (class_exists($nombre)) { $entidad = new $nombre(); $this->values['columnas'] = $entidad->getColumnsNames(); unset($entidad); } break; } $template = $this->variables->getTemplate(); $this->values['tipo'] = $tipo; $this->values['ambito'] = $ambito; $this->values['nombre'] = $nombre; $this->values['titulo'] = $this->variables->getTitulo(); $this->values['d'] = $datos; $this->values['yml'] = $this->variables->getYml(); $this->values['template'] = $this->variables->getTemplate(); unset($this->variables); } else { $template = '_global/forbiden.html.twig'; } return array('template' => $template, 'values' => $this->values); }
protected function cargaValores() { if (!isset($_SESSION['usuarioPortal']['menu'])) { // Está logeado (viene del portal), pero es la primera vez que entra $_SESSION['usuarioPortal']['accesosPortal'] = array(); // Carga la cadena de conexion a la base de datos del proyecto $proyectoApp = new PcaeProyectosApps(); $proyectoApp = $proyectoApp->find('PrimaryKeyMD5', $this->request[1]); //print_r($proyectoApp); $_SESSION['project']['Id'] = $proyectoApp->getId(); $_SESSION['project']['IdEmpresa'] = $proyectoApp->getIdProyecto()->getIdEmpresa()->getId(); $_SESSION['project']['empresa'] = $proyectoApp->getIdProyecto()->getIdEmpresa()->getRazonSocial(); $_SESSION['project']['title'] = $proyectoApp->getIdProyecto()->getProyecto(); $_SESSION['project']['url'] = $proyectoApp->getUrl(); $_SESSION['project']['conection'] = array('dbEngine' => $proyectoApp->getDbEngine(), 'host' => $proyectoApp->getHost(), 'user' => $proyectoApp->getUser(), 'password' => $proyectoApp->getPassword(), 'database' => $proyectoApp->getDatabase()); // Carga la cadena de conexión al servidor ftp del proyecto $_SESSION['project']['ftp'] = array('server' => $proyectoApp->getFtpServer(), 'port' => $proyectoApp->getFtpPort(), 'timeout' => $proyectoApp->getFtpTimeout(), 'folder' => $proyectoApp->getFtpFolder(), 'user' => $proyectoApp->getFtpUser(), 'password' => $proyectoApp->getFtpPassword()); unset($proyectoApp); // Establece el perfil del usuario para el proyecto y carga // el menú en base a su perfil $usuario = new Agentes($_SESSION['usuarioPortal']['Id']); //print_r($usuario); if ($usuario->getStatus()) { $idPerfil = $usuario->getIDPerfil()->getPrimaryKeyValue(); $_SESSION['usuarioPortal']['IdPerfil'] = $idPerfil; $_SESSION['usuarioPortal']['IdRol'] = $usuario->getIDRol()->getIDTipo(); $_SESSION['usuarioPortal']['email'] = $usuario->getEMail(); $_SESSION['emp'] = $_SESSION['project']['IdEmpresa']; $_SESSION['usuarioPortal']['sucursales'] = $usuario->getSucursales('', false); $_SESSION['suc'] = $_SESSION['usuarioPortal']['sucursales'][0]['Id']; $_SESSION['usuarioPortal']['menu'] = $usuario->getArrayMenu(); // Carga las variables de entorno y web del proyecto $this->cargaVariables(); // Activar la versión $var = new CpanVariables('Pro', 'Web'); $erp = $var->getNode('erp'); $_SESSION['ver'] = $erp['version'] != '' ? $erp['version'] : '0'; // Activar o no la posibilidad de cambiar precios $rolesCambioPrecio = explode(",", trim($erp['rolesCambioPrecios'])); $_SESSION['usuarioPortal']['cambioPrecios'] = in_array($_SESSION['usuarioPortal']['IdRol'], $rolesCambioPrecio); // Poner en la sesión la política de actualización de precios en base $_SESSION['usuarioPortal']['actuPrecios'] = $erp['actuPrecios'] != '' ? $erp['actuPrecios'] : 'PVP'; // Poner en la sesión el margén mínimo de venta $_SESSION['usuarioPortal']['margenMinimo'] = $erp['alertaMargen'] > 0 ? $erp['alertaMargen'] : 0; // Poner en la sesión si se generar alertas o no por falta de stock $_SESSION['usuarioPortal']['alertaStock'] = $erp['alertaStock']; // Establece los idiomas en base a la varible web del proyecto /** $langs = trim($_SESSION['VARIABLES']['WebPro']['globales']['lang']); $_SESSION['idiomas']['disponibles'] = ($langs == '') ? array('0' => 'es') : explode(",", $langs); if (!isset($_SESSION['idiomas']['actual'])) { $_SESSION['idiomas']['actual'] = 0; } */ } //print_r($_SESSION); unset($usuario); } }
/** * CÁLCULO DEL RECARGO ENERGÉTICO. * Si hay artículos que están sujetos a recargo energético, hay que calcular * el importe del impuesto e incluir una línea automática con dicho valor. * Si la línea ya está incluida, se actualiza. * * El articulo que se factura para recargo energetico viene definido en el parametro REART * Y el precio kilo en el parametro REIMP */ public function calculaRecargoEnergetico() { $var = new CpanVariables("Mod", "Web", "PcaeEmpresas"); $parametro = $var->getNode("especificas"); $reArticulo = $parametro['reArticulo']; unset($var); // Ver si existe el articulo que se ha definido en parametros // para facturar el recargo energetico $articulo = new Articulos(); $articulo = $articulo->find('Codigo', $reArticulo); if ($articulo->getIDArticulo()) { // Se ha definido el parametro con el codigo del articulo // para aplicar el recargo energetico. Ahora hay que ver si en el presupuesto // en curso hay articulos sujetos a recargo energético. $em = new EntityManager($this->getConectionName()); $tablaArticulos = "{$articulo->getDataBaseName()}.{$articulo->getTableName()}"; $lineas = new PstoLineas(); $tablaLineas = "{$lineas->getDataBaseName()}.{$lineas->getTableName()}"; unset($lineas); $query = "select t1.*,t2.Peso from {$tablaLineas} as t1, {$tablaArticulos} as t2 where t1.IDPsto='{$this->IDPsto}' and t1.IDArticulo=t2.IDArticulo and t2.RecargoEnergetico='1'"; $em->query($query); $rows = $em->fetchResult(); if ($rows) { //Hay articulos sujetos a recargo energetico $reKilos = 0; foreach ($rows as $row) { $reKilos += $row['MtsFa'] * $row['Peso']; } $reImporte = $reKilos * $articulo->getPrecioVenta(); //Ver si ya está la linea de presupuesto creada. $query = "select IDLinea from {$tablaLineas} where IDPsto='{$this->IDPsto}' and IDArticulo='{$articulo->getIDArticulo()}'"; $em->query($query); $rows = $em->fetchResult(); if ($rows) { // Ya estaba, actualizar $query = "update {$tablaLineas} set Unidades='{$reKilos}',Precio='{$articulo->getPrecioVenta()}',Importe='{$reImporte}' where IDLinea='{$rows[0]['IDLinea']}'"; $em->query($query); } else { // No está, crear $lineaPsto = new PstoLineas(); $lineaPsto->setIDPsto($this->IDPsto); $lineaPsto->setIDArticulo($articulo->getIDArticulo()); $lineaPsto->setDescripcion($articulo->getDescripcion()); $lineaPsto->setUnidades($reKilos); $lineaPsto->setPrecio($articulo->getPrecioVenta()); $lineaPsto->setImporte($reImporte); $lineaPsto->setIDAgente($_SESSION['usuarioPortal']['Id']); $lineaPsto->setIDComercial($this->IDComercial); $lineaPsto->setIDAlmacen($this->IDAlmacen); $lineaPsto->setIva($articulo->getIDIva()->getIva()); $lineaPsto->create(); unset($lineaPsto); } } else { // No hay articulos con recargo energetico. // Borro el eventual cargo de recargo energetico. $lineas = new PstoLineas(); $lineas->queryDelete("IDPsto='{$this->IDPsto}' and IDArticulo='{$articulo->getIDArticulo()}'"); unset($lineas); } $em->desConecta(); unset($em); } }
/** * Devuelve un array con los atributos de cada columna del módulo $modulo * * Los atributos son: caption, visible, updatable, default, permission, help * * Los valores de los atributos se obtienen de las variables de entorno del módulo, * y si no existen, se cargan del config.yml correspondiente * * @param string $modulo El nombre del módulo * @return array Array de atributos */ public function getAtributos($modulo) { $atributos = array(); // PRIMERO LEO LOS ATRIBUTOS DE LAS COLUMNAS QUE ESTÁN EN CONFIG.YML $columnasConfig = $this->getNode('columns'); // LUEGO LOS SUSTITUYO POR LOS ESPECIFICOS QUE ESTAN EN LAS VAR DE ENTORNO DE PROYECTO // DE TAL MANERA QUE PREVALECEN LOS DEFINIDOS EN LAS VARIABLES DE ENTORNO, PERO // SI NO EXISTIERA LA VARIABLE DE ENTORNO CORRESPONDIENTE ENTONCES PONGO LA DEL CONFIG. $variables = new CpanVariables('Mod', 'Env', $modulo); if (is_array($variables->getDatosYml())) { $arrayColumnas = $variables->getNode('columns'); foreach ($arrayColumnas as $key => $value) { $atributos[$key] = $value; if (is_array($columnasConfig[$key])) { foreach ($columnasConfig[$key] as $keyConfig => $valueConfig) { if (!isset($atributos[$key][$keyConfig])) { $atributos[$key][$keyConfig] = $valueConfig; } } } } } else { // Aún no se han definido las variables, por lo tanto cargo los atributos // en base al array de correspondencia de atributos predeterminados foreach ($columnasConfig as $keyColumna => $valueColumna) { foreach (VariablesEnv::$varEnvMod as $keyVar => $keyColumnaConfig) { $atributos[$keyColumna][$keyVar] = isset($valueColumna[$keyColumnaConfig]) ? $valueColumna[$keyColumnaConfig] : ""; } } } unset($variables); // Si el usuario es super pongo la visibilidad a TRUE //if ($_SESSION['usuarioPortal']['Id'] == '1') // foreach ($atributos as $key => $value) // ++$atributos[$key]['visible']; /** if (!$atributos[$key]['visible']) { $atributos[$key]['visible'] = '1'; $atributos[$key]['caption'] .= " (oculta)"; } */ return $atributos; }