public function testUsuarioActual() { POSController::ClientesVistasConfiguracion(true); $configuraciones = ConfiguracionDAO::search($this->configuracion); $configuracion = $configuraciones[0]; $sesion = SesionController::Actual(); $this->assertEquals($sesion['id_usuario'], $configuracion->getIdUsuario()); }
protected function GenerateResponse() { try { $this->response = SesionController::Actual(); } catch (Exception $e) { //Logger::error($e); throw new ApiException($this->error_dispatcher->invalidDatabaseOperation($e->getMessage())); } }
protected function _renderTopMenu() { $s = SesionController::Actual(); $u = UsuarioDAO::getByPK($s["id_usuario"]); ?> <a class="l" href="./helper.php">Ayuda</a> <a class="l">(<?php echo $u->getNombre(); ?> )</a> <a class="l" href="./../?cs=1"> Salir</a> <?php }
/** * *Crea un nuevo proveedor * * @param id_tipo_proveedor int Id del tipo proveedor al que pertenece este usuario * @param password string Password del proveedor para entrar al sistema * @param nombre string Nombre del proveedor * @param codigo_proveedor string Codigo interno para identificar al proveedor * @param codigo_postal string Codigo postal de la direccion del proveedor * @param id_ciudad int Id de la ciudad de la direccion del proveedor * @param texto_extra string Referencia de la direcciond el proveedor * @param numero_interior string Numero interior de la direccion del proveedor * @param numero_exterior string Numero exterior de la direccion del proveedor * @param direccion_web string Direccion web del proveedor * @param retenciones json Retenciones que afectan a este proveedor * @param impuestos json Ids de los impuestos que afectan a este proveedor * @param dias_embarque int Dias en que el proveedor embarca ( Lunes, Martes, Miercoles, Jueves..) * @param telefono_personal string Telefono personal del proveedor * @param rfc string RFC del proveedor * @param calle string Calle de la direccion del proveedor * @param email string Correo electronico del proveedor * @param id_moneda int Id de la moneda preferente del proveedor * @param cuenta_bancaria string Cuenta bancaria del proveedor * @param activo bool Si este proveedor esta activo o no * @param representante_legal string Representante legal del proveedor * @param tiempo_entrega string Tiempo de entrega del proveedor en dias * @param limite_credito float Limite de credito que otorga el proveedor * @param dias_de_credito int Dias de credito que otorga el proveedor * @param telefono1 string Telefono 1 de la direccion del proveedor * @param telefono2 string Telefono 2 de la direccion del proveedor * @return id_proveedor int Id autogenerado por la inserci�n del nuevo proveedor. **/ public static function Nuevo($codigo_proveedor, $id_tipo_proveedor, $nombre, $password, $activo = null, $cuenta_bancaria = null, $dias_de_credito = null, $dias_embarque = true, $direcciones = null, $direccion_web = null, $email = null, $id_moneda = null, $id_tarifa_compra = null, $id_tarifa_venta = null, $impuestos = null, $limite_credito = null, $representante_legal = null, $retenciones = null, $rfc = null, $telefono_personal1 = null, $telefono_personal2 = null, $tiempo_entrega = null) { Logger::log("Creando nuevo proveedor"); //Se obtiene la informacion actual $actual = SesionController::Actual(); //Se utiliza el metodo de nuevo usuario, este se encarga de las validaciones. //El rol numero 6 es tomado como el rol de proveedor try { $proveedor = PersonalYAgentesController::NuevoUsuario($codigo_proveedor, 6, $nombre, $password, 0, $email, $cuenta_bancaria, null, null, null, null, $dias_de_credito, $dias_embarque, null, null, $direcciones, 0, null, $id_tipo_proveedor, $id_moneda, $actual["id_sucursal"], $id_tarifa_compra, $id_tarifa_venta, $impuestos, null, $limite_credito, null, $direccion_web, $representante_legal, $retenciones, $rfc, null, null, $telefono_personal1, $telefono_personal2, $tiempo_entrega); } catch (BusinessLogicException $ble) { //propagate throw $ble; } catch (Exception $e) { Logger::error("No se pudo crear al nuevo proveedor: " . $e); throw new Exception("No se pudo crear al nuevo proveedor"); } Logger::log("Proveedor creado exitosamente"); return array("id_proveedor" => $proveedor["id_usuario"]); }
private function _renderWrapper() { if (!$this->parital_head_rendered) { $this->parital_head_rendered = true; ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="es" > <head> <title><?php echo $this->title; ?> </title> <meta charset=utf-8"> <link rel="stylesheet" type="text/css" href="http://api.caffeina.mx/ext-4.0.0/resources/css/ext-all.css" /> <script type="text/javascript" src="http://api.caffeina.mx/ext-4.0.0/ext-all.js"></script> <!-- <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> --> <!-- <script type="text/javascript" charset="utf-8" src="http://cdn.sencha.io/ext-4.1.0-gpl/ext-all.js"></script> --> <?php if (is_file("../css/basic.css")) { ?> <link type="text/css" rel="stylesheet" href="../css/basic.css"/><?php } ?> <?php if (is_file("../../css/basic.css")) { ?> <link type="text/css" rel="stylesheet" href="../../css/basic.css"/><?php } ?> <?php if (is_file("css/basic.css")) { ?> <link type="text/css" rel="stylesheet" href="css/basic.css"/><?php } ?> <script type="text/javascript" charset="utf-8" src="http://api.caffeina.mx/ext-4.0.0/examples/ux/grid/TransformGrid.js"></script> <?php if (is_file("../g/gerencia.js")) { ?> <script type="text/javascript" charset="utf-8" src="../g/gerencia.js"></script> <?php } else { ?> <script type="text/javascript" charset="utf-8" src="gerencia.js"></script> <?php } ?> <!--<script type="text/javascript" charset="utf-8" src="../g/gerencia.js"></script> --> <script type="text/javascript" charset="utf-8"> if(HtmlEncode===undefined){var HtmlEncode=function(a){var b=a.length,c=[];while(b--){var d=a[b].charCodeAt();if(d>127/*||d>90&&d<97*/){c[b]="&#"+d+";"}else{c[b]=a[b]}}return c.join("")}} </script> </head> <body class=""> <!-- <div id="FB_HiddenContainer" style="position:absolute; top:-10000px; width:0px; height:0px;"></div> --> <div class="devsitePage"> <div class="menu"> <div class="content"> <a class="logo" href="index.php"> <!--<img class="img" src="../../../media/N2f0JA5UPFU.png" alt="" width="166" height="17"/>--> <div style="width:166px; height: 17px"> </div> </a> <?php echo $this->_renderTopMenu(); ?> <a class="l"> <img style="margin-top:8px; display: none;" id="ajax_loader" src="../../media/loader.gif"> </a> <!-- --> <?php $s = SesionController::Actual(); if (!is_null($s["id_usuario"])) { ?> <script type="text/javascript" charset="utf-8"> Ext.onReady(function(){ Ext.define("Resultados", { extend: 'Ext.data.Model', proxy: { type: 'ajax', url : '../api/pos/buscar/', extraParams : { auth_token : Ext.util.Cookies.get("at") }, reader: { type: 'json', root: 'resultados', totalProperty: 'numero_de_resultados' } }, fields: [ {name: 'texto', mapping: 'texto'}, {name: 'id', mapping: 'id'}, {name: 'tipo', mapping: 'tipo'} ] }); dss = Ext.create('Ext.data.Store', { pageSize: 10, model: 'Resultados' }); Ext.create('Ext.panel.Panel', { renderTo: "BuscadorComponent_001", width: '88%', bodyPadding: 1, height: "26px", layout: 'anchor', items: [{ listeners :{ "select" : function(a,b,c){ if(b.length != 1) return; if(b[0].get("tipo") == "cliente"){ window.location = "clientes.ver.php?cid=" + b[0].get("id"); console.log("fue cliente"); return; } if(b[0].get("tipo") == "producto"){ window.location = "productos.ver.php?pid=" + b[0].get("id"); console.log("fue producto"); return; } console.log("no fue ninguno :("); } }, xtype: 'combo', store: dss, emptyText : "Buscar", //displayField: 'title', typeAhead: true, hideLabel: true, hideTrigger:true, listConfig: { /*Ext.view.BoundListView */ loadingText: 'Buscando...', emptyText: 'No se encontraron clientes.', // Custom rendering template for each item getInnerTpl: function() { return '<div>{tipo}<br><b>{texto}</b></div>'; } }, pageSize: 0 }] }); });//onReady </script> <div class="search"> <div id="BuscadorComponent_001"></div> </div> <?php } ?> <!-- --> <div class="clear"> </div> </div> </div> <div class="body nav"> <div class="content"> <!-- ---------------------------------------------------------------------- MENU ---------------------------------------------------------------------- --> <div id="bodyMenu" class="bodyMenu"> <div> <?php if (defined("IID") && is_file("../static/" . IID . ".jpg")) { $file = "../static/" . IID . ".jpg"; ?> <div style=" border-bottom: 1px solid white; -moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, .52); -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, .52); box-shadow: 0px 0px 5px rgba(0, 0, 0, .52); width: 166px; height: 140px; background-size:166px; background-repeat: no-repeat; background-image: url(<?php echo $file; ?> )"> </div> <?php } ?> </div> <div class="toplevelnav"> <?php $this->_renderMenu(); ?> </div></div> <!-- ---------------------------------------------------------------------- CONTENIDO ---------------------------------------------------------------------- --> <div id="bodyText" class="bodyText"> <div class="header"> <div class="content"> <style> .msg .x-box-mc { font-size:14px; } #msg-div { position:absolute; left:55%; top:10px; width:300px; z-index:20000; } #msg-div .msg { border-radius: 8px; -moz-border-radius: 8px; background: #F6F6F6; border: 2px solid #ccc; margin-top: 2px; padding: 10px 15px; color: #555; } #msg-div .msg h3 { margin: 0 0 8px; font-weight: bold; font-size: 15px; } #msg-div .msg p { margin: 0; }</style> <?php } ?> <?php for ($i = $this->partial_render_n; $i < sizeof($this->components); $i++) { echo $this->components[$i]->renderCmp(); $this->partial_render_n++; } if ($this->partial_render) { $this->partial_render = false; return; } ?> </div> </div> <div class="mtm pvm uiBoxWhite topborder"> <div class="mbm"></div> <!--<abbr class="timestamp">Generado <?php echo date("r", time()); ?> </abbr>--> </div> </div> <div class="clear"></div> </div> </div> <div class="footer"> <div class="content"> <div class="copyright"> <?php if (defined("SVN_REV")) { echo "CAFFEINA POS ERP DEV BUILD: <b>2.0</b> r<b>" . SVN_REV . "</b> |"; } ?> <a href="http://caffeina.mx"> Caffeina Software</a> </div> <div class="links"> <a href="">Admin</a> <a href="">API Publica</a> <a href="pos/j/">Desarrolladores</a> </div> </div> </div> </div> <?php if (!is_null($this->GA)) { ?> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', '<?php echo $this->GA; ?> ']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <?php } ?> <div style="" id="PosImSpace"></div> </body> </html> <?php }
/** * *Hacer un seguimiento al cliente * * @param texto string El texto que ingresa el que realiza el seguimiento **/ static function NuevoSeguimiento($id_cliente, $texto) { $cliente = UsuarioDAO::getByPK($id_cliente); if (is_null($cliente)) { throw new InvalidDataException("Este cliente no existe"); } if (strlen($texto) == 0) { throw new InvalidDataException("El texto no puede ser vacio"); } $usuario_actual = SesionController::Actual(); $s = new ClienteSeguimiento(); $s->setIdCliente($id_cliente); $s->setIdUsuario($usuario_actual["id_usuario"]); $s->setFecha(time()); $s->setTexto($texto); try { ClienteSeguimientoDAO::save($s); } catch (Exception $e) { throw new InvalidDatabaseOperationException($e); } return array("id_cliente_seguimiento" => $s->getIdClienteSeguimiento()); }
<?php if (!class_exists("PHPUnit_Runner_Version")) { define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; } $page = new ClienteComponentPage("Bienvendio a POS ERP"); $banner = new BannerComponent("POS ERP", "Bienvenido a POS ERP <br>un sistema de gestion empresarial", "../../../media/EAbydW1M_XR.png"); $page->addComponent($banner); //buscar si tiene ordenes de servico a su nombre $sesion_actual = SesionController::Actual(); $ordenes_array = new OrdenDeServicio(array("id_usuario_venta" => $sesion_actual["id_usuario"])); $ordenes = OrdenDeServicioDAO::search($ordenes_array); if (sizeof($ordenes) > 0) { $page->addComponent(new TitleComponent("Sus ordenes de servicio", 2)); $table = new TableComponent(array("id_servicio" => "Servicio", "fecha_orden" => "Fecha"), $ordenes); function renderIdServicio($id) { $serv = ServicioDAO::getByPK($id); return $serv->getNombreServicio(); } $table->addColRender("fecha_orden", "FormatTime"); $table->addOnClick("id_orden_de_servicio", "(function(a){ window.location = 'servicios.detalle.orden.php?oid='+a; })"); $table->addColRender("id_servicio", "renderIdServicio"); $page->addComponent($table); } $page->render();
/** * * Permite dar conocer al sistema las verdaderas existencias en un almacen, o sucursal. * * @param inventario json [{id_producto: 1,id_unidad: 2,cantidad: 0,id_lote : 2}] * @param id_sucursal int * */ static function Fisico($inventario, $id_sucursal = "") { //POS.API.POST("api/inventario/fisico", {inventario : Ext.JSON.encode([{id_producto:8, id_unidad:1, cantidad:7, id_lote:1}]) } , {callback:function(){}}) $s = SesionController::Actual(); Logger::log("---------- INVENTARIO FISICO SE ENCONTRARON " . count($inventario) . " AJUSTES ----------"); foreach ($inventario as $producto) { //self::ajustarLoteProducto($producto->id_lote, $producto->id_producto, $producto->id_unidad); //[{id_producto: 1,id_unidad: 2,cantidad: 0,id_lote : 2}] $producto->nombre = ProductoDAO::getByPK($producto->id_producto)->getNombreProducto(); Logger::log(" Estamos en {$producto->nombre}, id_unidad {$producto->id_unidad}, {$producto->cantidad} " . UnidadMedidaDAO::getByPK($producto->id_unidad)->getAbreviacion() . ", lote {$producto->id_lote}"); try { //verificamos si el lote indicado existe if (is_null($producto->id_lote) || strlen($producto->id_lote) == 0) { throw new InvalidDataException("No selecciono a que lote ira el producto {$producto->id_producto}"); } //busquemos el id del lote if (!($lote = LoteDAO::getByPK($producto->id_lote))) { throw new InvalidDataException("No se tiene registro del lote {$producto->id_lote}"); } //verificamos que exista la unidad de medida y este activa if (!UnidadMedidaDAO::getByPK($producto->id_unidad)) { throw new InvalidDataException("La unidad de medida {$producto->id_unidad} no existe, o no esta activa."); } //busquemos si este producto ya existe en este lote $lote_producto = LoteProductoDAO::getByPK($lote->getIdLote(), $producto->id_producto); if (is_null($lote_producto)) { Logger::log("El producto no estaba en el lote, se insertara"); /* //no existe, insertar $loteProducto = new LoteProducto(array( "id_lote" => $lote->getIdLote(), "id_producto" => $producto->id_producto, "cantidad" => $producto->cantidad, "id_unidad" => $producto->id_unidad )); LoteProductoDAO::save($loteProducto); Logger::log("Se guardo el LoteProducto : id_lote {$lote->getIdLote()}, id_producto {$producto->id_producto}, cantidad {$producto->cantidad} id_unidad {$producto->id_unidad}"); $loteEntrada = new LoteEntrada(array( "id_lote" => $lote->getIdLote(), "id_usuario" => $s['id_usuario'], "fecha_registro" => time(), "motivo" => "Entrada por ajuste de inventario" )); LoteEntradaDAO::save($loteEntrada); Logger::log("Se guardo el LoteEntrada: id_lote {$lote->getIdLote()}, id_usuario {$s['id_usuario']}, motivo {Entrada por ajuste de inventario}"); */ AlmacenesController::EntradaLote($lote->getIdLote(), array($producto), "Entrada por ajuste de inventario"); } else { Logger::log("El producto si estaba en el lote, verificaremos las cantidades"); //revisemos si es de la misma unidad if ($lote_producto->getIdUnidad() == $producto->id_unidad) { Logger::log("Se encontro que la unidad enviada es igual a la unidad del lote producto"); Logger::log("Se detecto una merma de {$producto->cantidad} " . UnidadMedidaDAO::getByPK($producto->id_unidad)->getAbreviacion() . " de {$producto->nombre}"); //$existencias_lote = ProductoDAO::ExistenciasLote($producto->id_producto, $lote->getIdLote(), $lote_producto->getIdUnidad()); $existencias_lote = ProductoDAO::ExistenciasTotales($producto->id_producto); Logger::log("Se encontraron {$existencias_lote} existencias en el lote {$lote->getIdLote()} para el producto {$producto->id_producto}"); } else { Logger::log("Se encontro que la unidad enviada es diferente a la unidad del lote producto, se procede a transformar"); //$existencias_lote = ProductoDAO::ExistenciasLote($producto->id_producto, $lote->getIdLote(), $lote_producto->getIdUnidad()); $existencias_lote = ProductoDAO::ExistenciasTotales($producto->id_producto); Logger::log("Se encontraron {$existencias_lote} " . UnidadMedidaDAO::getByPK($lote_producto->getIdUnidad())->getAbreviacion() . " en el lote {$lote->getIdLote()} para el producto " . ProductoDAO::getByPK($producto->id_producto)->getNombreProducto() . " , nosotros necesitamos que se transforme en " . UnidadMedidaDAO::getByPK($producto->id_unidad)->getAbreviacion()); //var_dump($producto->id_unidad, $lote_producto->getIdUnidad(), $existencias_lote); try { Logger::log("Enviara a transformar unidad base : {$producto->id_unidad}, unidad a transformar : {$lote_producto->getIdUnidad()}, cantidad a transformar : {$existencias_lote}"); $existencias_lote = UnidadMedidaDAO::convertir($lote_producto->getIdUnidad(), $producto->id_unidad, $existencias_lote); Logger::log("Como producto de la transformacion se obtuvo {$existencias_lote} "); } catch (BusinessLogicException $ide) { //no se pudo convertir porque son de //diferentes categorias throw $ide; //mostrar una excpetion mas fresona } } Logger::log("se evaluara {$existencias_lote} - {$producto->cantidad}"); //hacemos el ajuste $diff = $existencias_lote - $producto->cantidad; if ($diff > 0) { //entonces hay una merma y se reporta una salida al lote igual a $diff, especificando en motivo el id del movimiento realizado //se actualiza la cantidad de producto en lote producto //AlmacenesController::Salida($l->getIdAlmacen(), $producto, "100"); $diff = abs($diff); Logger::log("Se detecto una merma de {$diff} " . UnidadMedidaDAO::getByPK($producto->id_unidad)->getAbreviacion() . " de {$producto->nombre}"); /* $lote_salida = new LoteSalida(array( "id_lote" => $lote->getIdLote(), "id_usuario" => $s['id_usuario'], "fecha_registro" => time(), "motivo" => "Salida de producto por ajuste de inventario (merma)" )); LoteSalidaDAO::save($lote_salida); Logger::log("Se creo un lote salida id_lote {$lote->getIdLote()}, id_usuario {$s['id_usuario']}, motivo Salida de producto por ajuste de inventario (merma)"); $lote_salida_producto = new LoteSalidaProducto(array( "id_lote_salida" => $lote_salida->getIdLoteSalida(), "id_producto" => $producto->id_producto, "id_unidad" => $producto->id_unidad, "cantidad" => $producto->cantidad )); LoteSalidaProductoDAO::save($lote_salida_producto); Logger::log("Se creo un lote salida producto con id_lote_salida {$lote_salida->getIdLoteSalida()}, id_producto {$producto->id_producto}, id_unidad {$producto->id_unidad}, cantidad {$producto->cantidad}"); */ AlmacenesController::SalidaLote($lote->getIdLote(), array(array("id_producto" => $producto->id_producto, "cantidad" => $diff, "id_unidad" => $producto->id_unidad)), "Salida de producto por ajuste de inventario (merma)"); } if ($diff < 0) { $diff = abs($diff); //entonces hay un sobrante y se reporta una entrada al lote igual a $diff, especificando en motivo el id del movimiento realizado //se actualiza la cantidad de producto en lote producto //AlmacenesController::Entrada($l->getIdAlmacen(), $producto, "101"); Logger::log("Se detecto una sobrante de {$diff} " . UnidadMedidaDAO::getByPK($producto->id_unidad)->getAbreviacion()); /* $lote_entrada = new LoteEntrada(array( "id_lote" => $lote->getIdLote(), "id_usuario" => $s['id_usuario'], "fecha_registro" => time(), "motivo" => "Entrada de producto por ajuste de inventario (sobrante)" )); LoteEntradaDAO::save($lote_entrada); Logger::log("Se creo un lote entrada id_lote {$lote->getIdLote()}, id_usuario {$s['id_usuario']}, motivo Entrada de producto por ajuste de inventario (sobrante)"); $lote_entrada_producto = new LoteEntradaProducto(array( "id_lote_entrada" => $lote_entrada->getIdLote(), "id_producto" => $producto->id_producto, "id_unidad" => $producto->id_unidad, "cantidad" => $producto->cantidad )); LoteEntradaProductoDAO::save($lote_entrada_producto); Logger::log("Se creo un lote entrada producto con id_lote_entrada {$lote_entrada->getIdLoteEntrada()}, id_producto {$producto->id_producto}, id_unidad {$producto->id_unidad}, cantidad {$producto->cantidad}"); */ //AlmacenesController::EntradaLote($lote->getIdLote(), array($producto), "Entrada de producto por ajuste de inventario (sobrante)"); AlmacenesController::EntradaLote($lote->getIdLote(), array(array("id_producto" => $producto->id_producto, "cantidad" => $diff, "id_unidad" => $producto->id_unidad)), "Entrada de producto por ajuste de inventario (sobrante)"); } //TODO:HAY QUE AHCER PRUEBAS EXHAUSTIVAS PARA VER SI ESTE ULTIMO BLOQUE DE CODIGO SE DEBERIA DE ELIMINAR //actualizamos las existencias de lote producto if ($diff != 0) { Logger::log("Se procede a hacer el ajuste del lote producto"); self::ajustarLoteProducto($producto->id_lote, $producto->id_producto, $producto->id_unidad); } else { Logger::log("Se detecto que la cantidad en tote producto concuerda con la cantidad inventariada, pero aun asi se llamara al metodo de ajuste de prodcuto"); self::ajustarLoteProducto($producto->id_lote, $producto->id_producto, $producto->id_unidad); } } } catch (InvalidDataException $e) { Logger::error($e); DAO::transRollback(); throw $e; } catch (exception $e) { Logger::error($e); DAO::transRollback(); throw new InvalidDatabaseOperationException($e); } } }
private static function Cotizar($descuento, $id_comprador_venta, $impuesto, $subtotal, $tipo_venta, $total, $datos_cheque = null, $detalle_orden = null, $detalle_paquete = null, $detalle_venta = null, $id_sucursal = null, $saldo = "0", $tipo_de_pago = null) { Logger::log("Cotizando ...."); //Se obtiene el id del usuario actualmente logueado $aS = SesionController::Actual(); $id_usuario = $aS["id_usuario"]; //Se busca al usuario comprador $usuario = UsuarioDAO::getByPK($id_comprador_venta); if (!is_null($id_sucursal)) { $sucursal = SucursalDAO::getByPK($id_sucursal); if (is_null($sucursal)) { Logger::error("La sucursal " . $id_sucursal . " no existe"); throw new InvalidDataException("La sucursal no existe", 901); } if (!$sucursal->getActiva()) { Logger::error("La sucursal " . $id_sucursal . " esta desactivada"); throw new InvalidDataException("La sucursal esta desactivada", 901); } } //Se inicializa la venta con los parametros obtenidos $venta = new Venta(); $venta->setRetencion(0); $venta->setEsCotizacion(true); $venta->setIdCompradorVenta($id_comprador_venta); $venta->setSubtotal($subtotal); $venta->setImpuesto($impuesto); $venta->setTotal($total); $venta->setDescuento($descuento); $venta->setTipoDeVenta($tipo_venta); $venta->setIdCaja(null); $venta->setIdSucursal($id_sucursal); $venta->setIdUsuario($id_usuario); $venta->setIdVentaCaja(NULL); $venta->setCancelada(0); $venta->setTipoDePago(null); $venta->setSaldo(0); $venta->setFecha(time()); DAO::transBegin(); try { VentaDAO::save($venta); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo realizar la venta: " . $e); throw new Exception("No se pudo realizar la venta", 901); } //Si el detalle de las ordenes compradas, el detalle de los paquetes y el detalle de los productos //son nulos, manda error. if (is_null($detalle_orden) && is_null($detalle_paquete) && is_null($detalle_venta)) { throw new InvalidDataException("No se recibieron ni paquetes ni productos ni servicios para esta venta", 901); } //Por cada detalle, se valida la informacion recibida, se guarda en un registro //que contiene el id de la venta generada y se guarda el detalle en su respectiva tabla. if (!is_null($detalle_venta)) { $detalle_producto = object_to_array($detalle_venta); if (!is_array($detalle_producto)) { throw new Exception("El detalle del producto es invalido", 901); } foreach ($detalle_producto as $d_p) { $d_producto = new VentaProducto(); $d_producto->setIdVenta($venta->getIdVenta()); if (!array_key_exists("id_producto", $d_p) || !array_key_exists("cantidad", $d_p) || !array_key_exists("precio", $d_p) || !array_key_exists("descuento", $d_p) || !array_key_exists("impuesto", $d_p) || !array_key_exists("retencion", $d_p) || !array_key_exists("id_unidad", $d_p)) { throw new Exception("El detalle del producto es invalido", 901); } Logger::log("Insertando venta_producto:"); $d_producto->setCantidad($d_p["cantidad"]); $d_producto->setDescuento($d_p["descuento"]); $d_producto->setIdProducto($d_p["id_producto"]); $d_producto->setIdUnidad($d_p["id_unidad"]); $d_producto->setImpuesto($d_p["impuesto"]); $d_producto->setPrecio($d_p["precio"]); $d_producto->setRetencion($d_p["retencion"]); Logger::log($d_producto); try { VentaProductoDAO::save($d_producto); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo realizar la venta: " . $e); throw new Exception("No se pudo realizar la venta", 901); } } } /* Fin de if para detalle_producto */ DAO::transEnd(); Logger::log("====== Cotizacion realizada exitosamente ======== "); return array("id_venta" => $venta->getIdVenta()); }
public static function Corte($fecha_final, $id_sucursal, $total_efectivo) { if ($fecha_final > time()) { throw new BusinessLogicException("You must give a time in the past."); } if ($fecha_final == 0) { $fecha_final = time(); } $suc = SucursalDAO::getByPK($id_sucursal); if (is_null($suc)) { throw new InvalidDataException("'Sucursal' does not exist"); } $corte = EfectivoController::UltimoCorte($suc); if (is_null($corte)) { //'CordeDeSucursal' has never happende, //use the opening date. $start_date = $suc->getFechaApertura(); } else { $start_date = $corte->getFin(); } //ASSERT( $fecha_final . "<=" . $start_date ); $ingresos_por_tipo = array("BANCO" => 0.0, "CAJA" => 0.0); $ventas = VentasController::Lista($start_date, $fecha_final); //esto regresa, total, subtotal, impuesto $ventasTotal = VentaDAO::TotalVentasNoCanceladasAContadoDesdeHasta($start_date, $fecha_final); //$abonosTotal = AbonoVenta::TotalAbonosNoCanceladosDesdeHasta( $start_date, $fecha_final ); /* foreach( $ventas as $v ){ switch( $v->tipo_de_pago ){ cash : $ingresos[ cash ] += $v->getTotal(); banco : $ingresos[ banco ] += $v->getTotal() cheque : default: throw new Exception(); } } */ $cu = SesionController::Actual(); $corte = new CorteDeSucursal(); $corte->setIdSucursal($id_sucursal); $corte->setIdUsuario($cu["id_usuario"]); $corte->setInicio($start_date); $corte->setFin($fecha_final); $corte->setFechaCorte(time()); try { CorteDeSucursalDAO::save($corte); } catch (Exception $e) { throw new InvalidDatabaseException($e); } return array("id_corte_sucursal" => $corte->getIdCorteSucursal()); }
public static function EditarDireccion($direccion) { //verificamos si se cambiaron las direcciones if (!is_null($direccion)) { Logger::log("\tEditando direccion ..."); if (!is_array($direccion)) { //Logger::error("Verifique el formato de los datos de las direcciones, se esperaba un array "); //throw new Exception("Verifique el formato de los datos de las empresas, se esperaba un array "); $direccion = object_to_array($direccion); } $_direccion = new Direccion($direccion); $d = DireccionDAO::getByPK($_direccion->getIdDireccion()); //verificamos si se va a editar una direccion o se va a crear una nueva if (isset($d->id_direccion)) { //se edita la direccion if (!($_direccion = DireccionDAO::getByPK($d->id_direccion))) { DAO::transRollback(); Logger::error("No se tiene registro de la dirección con id : {$direccion->id_direccion}"); throw new InvalidDataException("No se tiene registro de la dirección con id : {$direccion->id_direccion}"); } //bandera que indica si cambia algun parametro de la direccion $cambio_direccion = false; //calle if (array_key_exists('calle', $direccion)) { $_direccion->setCalle($direccion['calle']); $cambio_direccion = true; } //numero_exterior if (array_key_exists('numero_exterior', $direccion)) { $cambio_direccion = true; $_direccion->setNumeroExterior($direccion['numero_exterior']); } //numero_interior if (array_key_exists('numero_interior', $direccion)) { $cambio_direccion = true; $_direccion->setNumeroInterior($direccion['numero_interior']); } //referencia if (array_key_exists('referencia', $direccion)) { $cambio_direccion = true; $_direccion->setReferencia($direccion['referencia']); } //colonia if (array_key_exists('colonia', $direccion)) { $cambio_direccion = true; $_direccion->setColonia($direccion['colonia']); } //id_ciudad if (array_key_exists('id_ciudad', $direccion)) { $cambio_direccion = true; $_direccion->setIdCiudad($direccion['id_ciudad']); } //codigo_postal if (array_key_exists('codigo_postal', $direccion)) { $cambio_direccion = true; $_direccion->setCodigoPostal($direccion['codigo_postal']); } //telefono if (array_key_exists('telefono', $direccion)) { $cambio_direccion = true; $_direccion->setTelefono($direccion['telefono']); } //telefono2 if (array_key_exists('telefono2', $direccion)) { $cambio_direccion = true; $_direccion->setTelefono2($direccion['telefono2']); } //Si cambio algun parametro de direccion, se actualiza el usuario que modifica y la fecha if ($cambio_direccion) { $_direccion->setUltimaModificacion(time()); $id_usuario = SesionController::Actual(); $id_usuario = $id_usuario["id_usuario"]; if (is_null($id_usuario)) { DAO::transRollback(); Logger::error("No se pudo obtener al usuario de la sesion, ya inicio sesion?"); throw new Exception("No se pudo obtener al usuario de la sesion, ya inicio sesion?"); } $_direccion->setIdUsuarioUltimaModificacion($id_usuario); //guardamos la direccion try { Logger::log("Salvando direccion..."); DireccionDAO::save($_direccion); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo guardar la direccion " . $e); if ($e->getCode() == 901) { throw new Exception("Error al guardar direccion de la sucursal {$sucursal->getRazonSocial()}: " . $e->getMessage(), 901); } throw new Exception("Error al guardar direccion de la sucursal {$sucursal->getRazonSocial()}", 901); } } //cambio dir } //verificacion editar dir } // !is_null }
define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; } $page = new GerenciaComponentPage(); $page->partialRender(); ?> <table> <tr> <td><img src="http://cdn1.iconfinder.com/data/icons/musthave/48/Stock%20Index%20Up.png"></td> <td><strong>Su configuracion esta incompleta.</strong><br>De una vuelta por la configuracion de Caffeina POS para importar sus clientes y productos.</td> </tr> </table> <?php $banner = new BannerComponent("POS ERP", "Bienvenido a POS ERP <br>un sistema de gestion empresarial", "../../media/EAbydW1M_XR.png"); $page->addComponent($banner); /* ************************************************* * Orden de Servicio Pendientes * ************************************************* */ $s = SesionController::Actual(); $ordenes_mias = OrdenDeServicioDAO::search(new OrdenDeServicio(array("id_usuario_asignado" => $s["id_usuario"], "activa" => true))); switch (sizeof($ordenes_mias)) { case 0: break; case 1: $page->addComponent(new TitleComponent("Tienes 1 orden de servicio pendiente.", 3)); break; default: $page->addComponent(new TitleComponent("Tienes " . sizeof($ordenes_mias) . " ordenes de servicio pendientes.", 3)); } $page->render();
/** * *Dar por terminada una orden, cuando el cliente satisface el ultimo pago * * @param id_orden int Id de la orden a terminar **/ public static function TerminarOrden($id_orden, $id_venta = null) { Logger::log("Terminando orden " . $id_orden . " "); if (!is_null($id_venta)) { Logger::log("Asignando orden a id_venta=" . $id_venta); //que la venta exista $v = VentaDAO::getByPK($id_venta); if (is_null($v)) { throw new InvalidDataException("La venta a la que se quiere asignar no existe."); } } //ver que exista la orden de servicio $ods = OrdenDeServicioDAO::getByPK($id_orden); if (is_null($ods)) { throw new InvalidDataException("La orden de servicio que desea terminar no existe"); } if (!$ods->getActiva()) { throw new BusinessLogicException("La orden que quieres terminar ya no esta terminada."); } DAO::transBegin(); try { $ods->setActiva(0); OrdenDeServicioDAO::save($ods); } catch (Exception $e) { throw InvalidDatabaseOperationException($e); } if (!is_null($id_venta)) { $vo = new VentaOrden(); $vo->setIdVenta($id_venta); $vo->setIdOrdenDeServicio($id_orden); $vo->setPrecio($ods->getPrecio()); $vo->setDescuento(0); $vo->setImpuesto(0); $vo->setRetencion(0); //Actualizar totales $ventaVo = VentaDAO::getByPK($id_venta); try { VentaOrdenDAO::save($vo); } catch (Exception $e) { throw InvalidDatabaseOperationException($e); } } else { //crearle una nueva venta $venta = new Venta(); $s = SesionController::Actual(); Logger::error("There is plenty of hard-coded stuff here !"); $venta->setIdCompradorVenta($ods->getIdUsuarioVenta()); $venta->setTipoDeVenta("contado"); $venta->setFecha(time()); $venta->setSubtotal(0); $venta->setEsCotizacion(0); $venta->setImpuesto(0); $venta->setTotal(0); $venta->setIdSucursal($s["id_sucursal"]); $venta->setIdUsuario($s["id_usuario"]); $venta->setSaldo(0); //si hay adelanto se resta al saldo de la venta el adelanto, esta resta se hace al insertar el abono_venta $venta->setCancelada(false); $venta->setRetencion(0); //vamos a ver si este dude tiene suficient credito para esto try { Logger::log("Insertando la venta ...."); VentaDAO::save($venta); } catch (Exception $e) { DAO::transRollback(); Logger::error($e->getMessage()); throw new InvalidDatabaseOperationException("No se pudo crear la nueva orden de servicio"); } $venta_orden = new VentaOrden(); $venta_orden->setIdVenta($venta->getIdVenta()); $venta_orden->setIdOrdenDeServicio($ods->getIdOrdenDeServicio()); $venta_orden->setPrecio(0); $venta_orden->setDescuento(0); $venta_orden->setImpuesto(0); $venta_orden->setRetencion(0); try { Logger::log("Insertando la orden de venta...."); VentaOrdenDAO::save($venta_orden); } catch (Exception $e) { DAO::transRollback(); Logger::error($e->getMessage()); throw new InvalidDatabaseOperationException("No se pudo crear la nueva orden de servicio"); } $id_venta = $venta->getIdVenta(); } DAO::transEnd(); Logger::log("La orden de servicio se ha terminado exitosamente"); return array("id_venta" => $id_venta); }
/** * * Registrar un gasto. El usuario y la sucursal que lo registran ser?tomados de la sesi?ctual. * * <br/><br/><b>Update :</b>Ademas deber?tambi?de tomar la fecha de ingreso del gasto del servidor y agregar tambi?como par?tro una fecha a la cual se deber?de aplicar el gasto. Por ejemplo si el d?09/09/11 (viernes) se tomo dinero para pagar la luz, pero resulta que ese d?se olvidaron de registrar el gasto y lo registran el 12/09/11 (lunes). Entonces tambien se deberia de tomar como parametro una <b>fecha</b> a la cual aplicar el gasto, tambien se deberia de enviar como parametro una <b>nota</b> * * @param fecha_gasto string Fecha del gasto * @param id_empresa int Id de la empresa a la que pertenece este gasto * @param billetes json Los billetes que se retiran de la caja por pagar este gasto * @param descripcion string Descripcion del gasto en caso de que no este contemplado en la lista de concpetos de gasto * @param folio string Folio de la factura del gasto * @param id_caja int Id de la caja de la que se sustrae el dinero para pagar el gasto * @param id_concepto_gasto int Id del concepto al que hace referencia el gasto * @param id_orden_de_servicio int Id de la orden del servicio que genero este gasto * @param id_sucursal int Id de la sucursal a la que pertenece este gasto * @param monto float Monto del gasto en caso de que no este contemplado por el concepto de gasto o sea diferente a este * @param nota string Nota del gasto * @return id_gasto int Id generado por la insercin del nuevo gasto **/ public static function NuevoGasto($fecha_gasto, $id_empresa, $billetes = null, $descripcion = null, $folio = null, $id_caja = null, $id_concepto_gasto = null, $id_orden_de_servicio = null, $id_sucursal = null, $monto = null, $nota = null) { //obtiene al usuario de la sesion actual $id_usuario = SesionController::Actual(); $id_usuario = $id_usuario["id_usuario"]; if (is_null($id_usuario)) { throw new Exception("No se pudo obtener el usuario de la sesion, ya inicio sesion?"); } //Se validan los parametros $validar = self::validarParametrosGasto(null, $id_empresa, $id_concepto_gasto, $id_orden_de_servicio, $fecha_gasto, $id_sucursal, $id_caja, $nota, $descripcion, $folio, $monto); //Si no se recibio monto, se toma del concepto de gasto. //Si no se recibio concepto de gasto o este no cuenta con un monto se manda una excepcion if (is_null($monto)) { if (is_null($id_concepto_gasto)) { throw new Exception("No se recibio un concepto de gasto ni un monto"); } $concepto_gasto = ConceptoGastoDAO::getByPK($id_concepto_gasto); if (is_null($concepto_gasto)) { throw new Exception("El concepto de gasto recibido no existe."); } $monto = $concepto_gasto->getMonto(); if (is_null($monto)) { throw new Exception("El concepto de gasto recibido no cuenta con un monto ni se recibio un monto"); } } //Si no se recibe sucursal ni caja se intenta tomar las actuales if (!$id_sucursal) { $id_sucursal = self::getSucursal(); } if (!$id_caja) { $id_caja = self::getCaja(); } if (!is_null($id_caja)) { try { CajasController::modificarCaja($id_caja, 0, $billetes, $monto); } catch (Exception $e) { throw $e; } } //Se inicializa el registro de gasto $gasto = new Gasto(); // fecha_gasto might be in the format : 2012-10-21T00:00:00 // if this is the case then act acordingly if (is_int($fecha_gasto)) { $gasto->setFechaDelGasto($fecha_gasto); } else { $gasto->setFechaDelGasto(strtotime($fecha_gasto)); } $gasto->setIdEmpresa($id_empresa); $gasto->setMonto($monto); $gasto->setIdSucursal($id_sucursal); $gasto->setIdCaja($id_caja); $gasto->setIdOrdenDeServicio($id_orden_de_servicio); $gasto->setIdConceptoGasto($id_concepto_gasto); $gasto->setDescripcion($descripcion); $gasto->setFolio($folio); $gasto->setNota($nota); $gasto->setFechaDeRegistro(time()); $gasto->setIdUsuario($id_usuario); $gasto->setCancelado(0); //Se incrementa el costo de la orden de servicio si este gasto se le asigna a alguna $orden_de_servicio = null; if (!is_null($id_orden_de_servicio)) { $orden_de_servicio = OrdenDeServicioDAO::getByPK($id_orden_de_servicio); $orden_de_servicio->setPrecio($monto + $orden_de_servicio->getPrecio()); } DAO::transBegin(); try { GastoDAO::save($gasto); if (!is_null($orden_de_servicio)) { OrdenDeServicioDAO::save($orden_de_servicio); } } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo crear el gasto: " . $e); throw new Exception("No se pudo crear el gasto"); } DAO::transEnd(); Logger::log("Gasto creado exitosamente"); return array("id_gasto" => $gasto->getIdGasto()); }
/** * *Envia productos fuera del almacen. Ya sea que sea un traspaso de un alamcen a otro o por motivos de inventarios fisicos. * * @param id_lote int Id del lote de donde se descontaran los productos. * @param productos json Objeto que contendra los ids de los productos que seran sacados del alamcen con sus cantidades y sus unidades * @param motivo string Motivo de la salida del producto * @return id_salida_lote int ID de la salida del producto **/ static function SalidaLote($id_lote, $productos, $motivo = null) { if (is_null(LoteDAO::getByPK($id_lote))) { throw new InvalidDataException("este lote no existe"); } if (!is_array($productos)) { throw new InvalidDataException("productos no es un array"); } $sesion = SesionController::Actual(); DAO::transBegin(); $sl = new LoteSalida(); $sl->setIdLote($id_lote); $sl->setIdUsuario($sesion["id_usuario"]); $sl->setFechaRegistro(time()); $sl->setMotivo(is_null($motivo) ? "" : $motivo); try { LoteSalidaDAO::save($sl); } catch (Exception $e) { DAO::transRollback(); throw new InvalidDatabaseOperationException($e); } for ($i = 0; $i < sizeof($productos); $i++) { if (!is_array($productos[$i])) { throw new InvalidDataException("El producto en la posicion {$i} no es un arreglo como se esperaba"); } if (!array_key_exists("id_producto", $productos[$i])) { throw new InvalidDataException("El producto en {$i} no tiene id_prodcuto"); } if (!array_key_exists("cantidad", $productos[$i])) { throw new InvalidDataException("El producto en {$i} no tiene cantidad"); } if (is_null(ProductoDAO::getByPK($productos[$i]["id_producto"]))) { throw new InvalidDataException("El producto " . $productos[$i]["id_producto"] . " no existe."); } $lp = LoteProductoDAO::getByPK($id_lote, $productos[$i]["id_producto"]); if (is_null($lp)) { throw new InvalidDataException("El lote {$id_lote} no tiene el producto " . $productos[$i]["id_producto"]); } if ($productos[$i]["cantidad"] > $lp->getCantidad()) { throw new InvalidDataException("Estas intentando sacar mas de lo que hay en el lote."); } if (!isset($productos[$i]["id_unidad"])) { throw new InvalidDataException("El producto " . $productos[$i]["id_producto"] . " proporcionado no tiene id_unidad"); } $equivalencia = UnidadMedidaDAO::convertir($productos[$i]["id_unidad"], $lp->getIdUnidad(), $productos[$i]["cantidad"]); if ($equivalencia > $lp->getCantidad()) { Logger::log("Se Comparara {$equivalencia} > {$lp->getCantidad()}"); throw new InvalidDataException("Estas intentando sacar mas de lo que hay en el lote."); } $lp->setCantidad($lp->getCantidad() - $productos[$i]["cantidad"]); try { LoteProductoDAO::save($lp); LoteSalidaProductoDAO::save(new LoteSalidaProducto(array("id_lote_salida" => $sl->getIdLoteSalida(), "id_producto" => $productos[$i]["id_producto"], "id_unidad" => $productos[$i]["id_unidad"], "cantidad" => $productos[$i]["cantidad"]))); Logger::log("Removiendo qty=" . $productos[$i]["cantidad"] . "; prod=" . $productos[$i]["id_producto"] . "; lote=" . $id_lote); } catch (Exception $e) { Logger::error($e); throw new InvalidDatabaseOperationException($e); } } DAO::transEnd(); return array("id_salida_lote" => $sl->getIdLoteSalida()); }
/** * *Permite establecer si habra productos que mostrar al cliente y cuales propiedades de ellos. * * @param mostrar bool Si queremos que se muestren productos al cliente. * @param propiedades json Arreglo de strings con los campos de los productos que se mostraran al cliente. **/ public static function ClientesVistasConfiguracion($mostrar, $propiedades = null) { $sesion = SesionController::Actual(); ConfiguracionDAO::GuardarConfigDeVC($mostrar, $sesion['id_usuario'], $propiedades); }