Esempio n. 1
0
 public function testUsuarioActual()
 {
     POSController::ClientesVistasConfiguracion(true);
     $configuraciones = ConfiguracionDAO::search($this->configuracion);
     $configuracion = $configuraciones[0];
     $sesion = SesionController::Actual();
     $this->assertEquals($sesion['id_usuario'], $configuracion->getIdUsuario());
 }
Esempio n. 2
0
 protected function GenerateResponse()
 {
     try {
         $this->response = SesionController::Actual();
     } catch (Exception $e) {
         //Logger::error($e);
         throw new ApiException($this->error_dispatcher->invalidDatabaseOperation($e->getMessage()));
     }
 }
Esempio n. 3
0
    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 
    }
Esempio n. 4
0
 /**
  *
  *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"]);
 }
Esempio n. 5
0
    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 
    }
Esempio n. 6
0
 /**
  *
  *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());
 }
Esempio n. 7
0
<?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();
Esempio n. 8
0
 /**
  *
  * 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);
         }
     }
 }
Esempio n. 9
0
 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());
 }
Esempio n. 10
0
 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());
 }
Esempio n. 11
0
 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
 }
Esempio n. 12
0
    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();
Esempio n. 13
0
 /**
  *
  *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);
 }
Esempio n. 14
0
 /**
  *
  * 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());
 }
Esempio n. 15
0
 /**
  *
  *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());
 }
Esempio n. 16
0
 /**
  *
  *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);
 }