function descripcion_sucursal($id_sucursal) { if (!SucursalDAO::getByPK($id_sucursal)) { return ""; } return "<font title = \"Ir a sucursal\" style = \"cursor:pointer;\" onClick = \"(function(){ window.location = 'sucursales.ver.php?sid={$id_sucursal}'; })();\" >" . SucursalDAO::getByPK($id_sucursal)->getRazonSocial() . "</font>"; }
public function testNuevoCorteSucursal() { $id = ScenarioMaker::CreateSucursalAndReturnID("N"); EfectivoController::NuevoCorteSucursal(0, $id); //now, 'UltimoCorte' should not return null $this->assertNotNull(EfectivoController::UltimoCorte(SucursalDAO::getByPK($id))); }
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 validarParametrosUsuario($id_usuario = null, $id_direccion = null, $id_sucursal = null, $id_rol = null, $id_clasificacion_cliente = null, $id_clasificacion_proveedor = null, $id_moneda = null, $activo = null, $nombre = null, $rfc = null, $curp = null, $comision_ventas = null, $telefono_personal1 = null, $telefono_personal2 = null, $limite_credito = null, $descuento = null, $password = null, $salario = null, $correo_electronico = null, $pagina_web = null, $saldo_del_ejercicio = null, $ventas_a_credito = null, $representante_legal = null, $facturar_a_terceros = null, $dia_de_pago = null, $mensajeria = null, $intereses_moratorios = null, $denominacion_comercial = null, $dias_de_credito = null, $cuenta_de_mensajeria = null, $dia_de_revision = null, $codigo_usuario = null, $dias_de_embarque = null, $tiempo_entrega = null, $cuenta_bancaria = null, $id_tarifa_compra = null, $id_tarifa_venta = null, $id_usuario_padre = null) { //valida que el id del usuario exista en la base de datos if (!is_null($id_usuario)) { if (is_null(UsuarioDAO::getByPK($id_usuario))) { return "El usuario con id: " . $id_usuario . " no existe"; } } //valida que el id de la direccion exista en la base de datos if (!is_null($id_direccion)) { if (is_null(DireccionDAO::getByPK($id_direccion))) { return "La direccion con id: " . $id_direccion . " no existe"; } } //valida el id de la sucursal exista en la base de datos if (!is_null($id_sucursal)) { if (is_null(SucursalDAO::getByPK($id_sucursal))) { return "La sucursal con id: " . $id_sucursal . " no existe"; } } //valida que el id del rol exista en la base de datos if (!is_null($id_rol)) { if (is_null(RolDAO::getByPK($id_rol))) { return "El rol con id: " . $id_rol . " no existe"; } } //valida que la clasificacion del cliente exista en la base de datos if (!is_null($id_clasificacion_cliente)) { if (is_null(ClasificacionClienteDAO::getByPK($id_clasificacion_cliente))) { return "La clasificacion cliente con id: " . $id_clasificacion_cliente . " no existe"; } } //valida que la clasificacion del proveedor exista en la base de datos if (!is_null($id_clasificacion_proveedor)) { if (is_null(ClasificacionProveedorDAO::getByPK($id_clasificacion_proveedor))) { return "La clasficiacion proveedor con id: " . $id_clasificacion_proveedor . " no existe"; } } //valida que la moneda exista en la base de datos if (!is_null($id_moneda)) { Logger::log("Editando a moneda:" . $id_moneda); if (is_null(MonedaDAO::getByPK($id_moneda))) { return "La moneda con id: " . $id_moneda . " no existe"; } } //valida el nombre if (!is_null($nombre)) { $e = ValidacionesController::validarLongitudDeCadena($nombre, 1, 100); if (!$e) { return "El numero de caracteres del nombre (" . $nombre . ") no esta entre 1 y 100"; } } //valida el rfc, el rfc solo puede estar compuesto por Letras mayusculas y numeros if (!is_null($rfc)) { $e = ValidacionesController::validarLongitudDeCadena($rfc, 1, 30); if (!$e) { return "El numero de caracteres del rfc (" . $rfc . ") no esta entre 1 y 30"; } if (preg_match('/[^A-Z0-9]/', $rfc)) { return "El rfc " . $rfc . " contiene caracteres fuera del rango A-Z y 0-9"; } } //valida el curp, el curp solo puede tener letras mayusculas y numeros if (!is_null($curp)) { $e = ValidacionesController::validarLongitudDeCadena($curp, 1, 30); if (!$e) { return "El numero de caracteres de la curp (" . $curp . ") no esta entre 1 y 30"; } if (preg_match('/[^A-Z0-9]/', $curp)) { return "El curp " . $curp . " contiene caracteres fuera del rango A-Z y 0-9"; } } //valida la comision por ventas if (!is_null($comision_ventas)) { $e = ValidacionesController::validarNumero($comision_ventas, 0, 100); if (!$e) { return "La comision de ventas (" . $comision_ventas . ") no esta entre 0 y 100"; } } //valida el telefono. Los telefonos solo pueden tener numeros, guiones,parentesis,asteriscos y espacios en blanco if (!is_null($telefono_personal1)) { $e = ValidacionesController::validarLongitudDeCadena($telefono_personal1, 1, 20); if (!$e) { return "El numero de caracteres del telefono personal (" . $telefono_personal1 . ") no esta entre 1 y 20"; } if (preg_match('/[^0-9\\- \\(\\)\\*]/', $telefono_personal1)) { return "El telefono " . $telefono_personal1 . " tiene caracteres fuera del rango 0-9,-,(,),* o espacio vacío"; } } //valida el telefono. Los telefonos solo pueden tener numeros, guiones,parentesis,asteriscos y espacios en blanco if (!is_null($telefono_personal2)) { $e = ValidacionesController::validarLongitudDeCadena($telefono_personal2, 1, 20); if (!$e) { return "El numero de caracteres del telefono personal alterno (" . $telefono_personal2 . ") no esta entre 1 y 20"; } if (preg_match('/[^0-9\\- \\(\\)\\*]/', $telefono_personal2)) { return "El telefono " . $telefono_personal2 . " tiene caracteres fuera del rango 0-9,-,(,),* o espacio vacío"; } } //valida el activo. Activo es una variable booleana. if (!is_null($activo)) { $e = ValidacionesController::validarEntero($activo, 0, 1); if (!$e) { return "La variable activo (" . $activo . ") no esta entre 0 y 1"; } } //valida el limite de credito if (!is_null($limite_credito)) { $e = ValidacionesController::validarNumero($limite_credito, 0, 1.8E+200); if (!$e) { return "El limite de credito (" . $limite_credito . ") no esta entre 0 y 1.8e200"; } } //valida el descuento. El descuento es un porcentaje y no puede ser mayor a 100 if (!is_null($descuento)) { $e = ValidacionesController::validarNumero($descuento, 0, 100); if (!$e) { return "El descuento (" . $descuento . ") no esta entre 0 y 100"; } } //valida el password, El pasword tiene que tener una longitud mayor o igual a 4 if (!is_null($password)) { $e = ValidacionesController::validarLongitudDeCadena($password, 4, 32); if (!$e) { return "El numero de caracteres del password (" . $password . ") no esta entre 4 y 32"; } } //valida el salario if (!is_null($salario)) { $e = ValidacionesController::validarNumero($salario, 0, 1.8E+200); if (!$e) { return "El salario (" . $salario . ") no esta entre 0 y 1.8e200"; } } //valida el correo electronico segun las especificaciones de php if (!is_null($correo_electronico)) { $e = ValidacionesController::validarLongitudDeCadena($correo_electronico, 3, 30); if (!$e) { return "El numero de caracteres del correo electronico (" . $correo_electronico . ") no esta entre 3 y 30"; } if (!is_string(filter_var($correo_electronico, FILTER_VALIDATE_EMAIL))) { return "El correo electronico " . $correo_electronico . " no es valido"; } } //valida que una pagina web tenga un formato valido. if (!is_null($pagina_web)) { $e = ValidacionesController::validarLongitudDeCadena($pagina_web, 2, 30); if (!$e) { return $e; } if (!preg_match('/^(http|https|ftp):\\/\\/[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,6}' . '((:[0-9]{1,5})?\\/.*)?$/i', $pagina_web) && !preg_match('/^[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,6}' . '((:[0-9]{1,5})?\\/.*)?$/i', $pagina_web)) { return "La direccion web " . $pagina_web . " no cumple el formato valido"; } } //valida el saldo del ejercicio if (!is_null($saldo_del_ejercicio)) { $e = ValidacionesController::validarNumero($saldo_del_ejercicio, -1.8E+200, 1.8E+200); if (!$e) { return "El saldo del ejercicio (" . $saldo_del_ejercicio . ") no esta entre -1.8e200 y 1.8e200"; } } //valida las ventas a credito if (!is_null($ventas_a_credito)) { $e = ValidacionesController::validarEntero($ventas_a_credito, 0, PHP_INT_MAX); if (!$e) { return "Las venta a credito no estan entre 0 y " . PHP_INT_MAX; } } //valida el represnetante legal if (!is_null($representante_legal)) { $e = ValidacionesController::validarLongitudDeCadena($representante_legal, 0, 100); if (!$e) { return "El numero de caracteres del representante legal (" . $representante_legal . ") no esta entre 0 y 100"; } } //valida la facturacion a terceros. Es un boleano if (!is_null($facturar_a_terceros)) { $e = ValidacionesController::validarEntero($facturar_a_terceros, 0, 1); if (!$e) { return "La variable facturar a terceros (" . $facturar_a_terceros . ") no esta entre 0 y 1"; } } //valida los dias de pago if (!is_null($dia_de_pago)) { $e = ValidacionesController::validarLongitudDeCadena($dia_de_pago, 19, 19); if (!$e) { return "La fecha de dia de pago (" . $dia_de_pago . ") es invalida, el formato valido es YYYY-MM-dd HH:mm:ss"; } } //valida el boleano mensajeria if (!is_null($mensajeria)) { $e = ValidacionesController::validarEntero($mensajeria, 0, 1); if (!$e) { return "La variable mensajeria (" . $mensajeria . ") no esta entre 0 y 1"; } } //valida los intereses moratorios if (!is_null($intereses_moratorios)) { $e = ValidacionesController::validarNumero($intereses_moratorios, 0, 1.8E+200); if (!$e) { return "Los intereses moratorios (" . $intereses_moratorios . ") no estan entre 0 y 1.8e200"; } } //valida la denominacion comercial if (!is_null($denominacion_comercial)) { $e = ValidacionesController::validarLongitudDeCadena($denominacion_comercial, 0, 100); if (!$e) { return "El numero de caracteres de la denominacion comercial (" . $denominacion_comercial . ") no esta entre 0 y 100"; } } //valida los dias de credito if (!is_null($dias_de_credito)) { $e = ValidacionesController::validarEntero($dias_de_credito, 0, PHP_INT_MAX); if (!$e) { return "Los dias de credito (" . $dias_de_credito . ") no estan en el rango de 0 a " . PHP_INT_MAX; } } //valida la cuenta de mensajeria if (!is_null($cuenta_de_mensajeria)) { $e = ValidacionesController::validarLongitudDeCadena($cuenta_de_mensajeria, 0, 50); if (!$e) { return "El numero de caracteres de la cuenta de mensajeria (" . $cuenta_de_mensajeria . ") no etsa entre 0 y 50"; } } //valida lso dias de revision if (!is_null($dia_de_revision)) { $e = ValidacionesController::validarLongitudDeCadena($dia_de_revision, 19, 19); if (!$e) { return "El dia de revision (" . $dia_de_revision . ") no tiene el formato apropiado, el formato valido es YYYY-MM-dd HH:mm:ss"; } } //valida el codigo de usuario if (!is_null($codigo_usuario)) { $e = ValidacionesController::validarLongitudDeCadena($codigo_usuario, 1, 50); if (!$e) { return "El numero de caracteres del codigo de usuario no esta entre 1 y 50"; } if (preg_match('/[^a-zA-Z0-9]/', $codigo_usuario)) { return "El codigo de usuario (" . $codigo_usuario . ") no tiene solo caracteres alfanumericos"; } } //valida los dias de embarque if (!is_null($dias_de_embarque)) { $e = ValidacionesController::validarEntero($dias_de_embarque, 0, PHP_INT_MAX); if (!$e) { return "Los dias de embarque (" . $dias_de_embarque . ") no esta entre 0 y " . PHP_INT_MAX; } } //valida el tiempo de entrega if (!is_null($tiempo_entrega)) { $e = ValidacionesController::validarEntero($tiempo_entrega, 0, PHP_INT_MAX); if (!$e) { return "El tiempo de entrega (" . $tiempo_entrega . ") no esta entre 0 y " . PHP_INT_MAX; } } //valida la cuenta bancaria if (!is_null($cuenta_bancaria)) { $e = ValidacionesController::validarLongitudDeCadena($cuenta_bancaria, 0, 50); if (!$e) { return "El numero de caracteres de la cuenta bancaria (" . $cuenta_bancaria . ") no esta entre 0 y 50"; } } //valida que la tarifa de compra sea valida if (!is_null($id_tarifa_compra)) { $tarifa = TarifaDAO::getByPK($id_tarifa_compra); if (is_null($tarifa)) { return "La tarifa " . $id_tarifa_compra . " no existe"; } if (!$tarifa->getActiva()) { return "La tarifa " . $id_tarifa_compra . " no esta activa"; } if ($tarifa->getTipoTarifa() != "compra") { return "La tarifa " . $id_tarifa_compra . " no es una tarifa de compra"; } } //valida que la tarifa de venta sea valida if (!is_null($id_tarifa_venta)) { $tarifa = TarifaDAO::getByPK($id_tarifa_venta); if (is_null($tarifa)) { return "La tarifa " . $id_tarifa_venta . " no existe"; } if (!$tarifa->getActiva()) { return "La tarifa " . $id_tarifa_venta . " no esta activa"; } if ($tarifa->getTipoTarifa() != "venta") { return "La tarifa " . $id_tarifa_venta . " no es una tarifa de venta"; } } //valida que el usuario padre exista y este activo if (!is_null($id_usuario_padre)) { $usuario_padre = UsuarioDAO::getByPK($id_usuario_padre); if (is_null($usuario_padre)) { return "El usuario padre " . $id_usuario_padre . " no existe"; } if ($usuario_padre->getActivo()) { return "El usuario padre " . $usuario_padre->getNombre() . " no esta activo"; } } return true; }
function funcion_sucursal($id_sucursal) { return SucursalDAO::getByPK($id_sucursal) ? SucursalDAO::getByPK($id_sucursal)->getRazonSocial() : "------"; }
private static function cancelarAbonoPrestamo(AbonoPrestamo $abono, $id_caja, $billetes) { $prestamo = PrestamoDAO::getByPK($abono->getIdPrestamo()); if (is_null($prestamo)) { Logger::error("FATAL!!!! Este abono apunta a un prestamo que no existe!!"); throw new Exception("FATAL!!!! Este abono apunta a un prestamo que no existe!!"); } // //Los solicitantes pueden ser positivos o negativos. //Si son positivos, son usuarios, si son negativos, son sucursales. // //Cuando un usuario cancela su abono a un prestamo, se incrementa su deuda. // //Cuando una sucursal cancela su abono, solo se afecta el prestamo, pues //la cuenta de la sucursal se calcula a partir de todos sus movimientos //y es en el prestamo donde se vera reflejado el cambio. // $id_solicitante = $prestamo->getIdSolicitante(); if ($id_solicitante > 0) { $solicitante = UsuarioDAO::getByPK($id_solicitante); } else { $solicitante = SucursalDAO::getByPK($id_solicitante * -1); } if (is_null($solicitante)) { Logger::error("FATAL!!!! El prestamo de este abono no tiene un solicitante"); throw new Exception("FATAL!!!! El prestamo de este abono no tiene un solicitante"); } $monto = $abono->getMonto(); if ($id_solicitante > 0) { $solicitante->setSaldoDelEjercicio($solicitante->getSaldoDelEjercicio() - $monto); } $prestamo->setSaldo($prestamo->getSaldo() - $monto); // //Un Prestamo no puede ser cancelado, solo liquidado. // //Si no hay una caja, se tomara el dinero como ganado. // if (!is_null($id_caja)) { try { CajasController::modificarCaja($id_caja, 0, $billetes, $monto); } catch (Exception $e) { throw $e; } } try { self::eliminarCheques($abono->getIdAbonoPrestamo(), null, null, 1); } catch (Exception $e) { throw $e; } // //Si no ha ocurrido ningun error con los billetes o con la caja, actualizas //al usuario y a la compra // DAO::transBegin(); try { if ($id_solicitante > 0) { UsuarioDAO::save($solicitante); } PrestamoDAO::save($prestamo); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se ha podido actualizar al usuario ni al prestamo: " . $e); throw new Exception("No se ha podido actualizar al usuario ni al prestamo"); } DAO::transEnd(); }
/** * *Obtener los detalles de un cliente. * * @param id_cliente int Id del cliente del cual se listarn sus datos. * @return cliente json Arreglo que contendr� la informaci�n del cliente. **/ public static function Detalle($id_cliente) { Logger::log("Listando los detalles del cliente"); //valida que el cliente exista, que sea cliente y que este activo /*$validar = self::validarParametrosCliente($id_cliente); if(is_string($validar)) { Logger::error($validar); throw new Exception($validar,901); }*/ //Se regresa un arreglo que contendra en el primer campo el cliente en si, en segundo campo estara //su direccion, el tercero sera su direccion alterna, el cuarto sera la sucursal en la que fue dado de alta, //la quinta sera el rol que tiene, la sexta sera su clasificacion, la septima la moneda que prefiere. $cliente = array(); $c = UsuarioDAO::getByPK($id_cliente); array_push($cliente, $c); array_push($cliente, DireccionDAO::getByPK($c->getIdDireccion())); array_push($cliente, DireccionDAO::getByPK($c->getIdDireccionAlterna())); array_push($cliente, SucursalDAO::getByPK($c->getIdSucursal())); array_push($cliente, RolDAO::getByPK($c->getIdRol())); array_push($cliente, ClasificacionClienteDAO::getByPK($c->getIdClasificacionCliente())); array_push($cliente, MonedaDAO::getByPK($c->getIdMoneda())); array_push($cliente, ExtraParamsValoresDAO::getVals("usuarios", $id_cliente)); return $cliente; }
public function testUltimoCorte3() { $id = ScenarioMaker::CreateSucursalAndReturnID(); $this->assertNull(EfectivoController::UltimoCorte(SucursalDAO::getByPK($id))); }
$btn_eliminar = new MenuItem("Desactivar esta caja", null); $btn_eliminar->addApiCall("api/sucursal/caja/eliminar", "GET"); $btn_eliminar->onApiCallSuccessRedirect("sucursales.lista.caja.php"); $btn_eliminar->addName("eliminar"); $funcion_eliminar = " function eliminar_caja(btn){" . "if(btn == 'yes')" . "{" . "var p = {};" . "p.id_caja = " . $_GET["cid"] . ";" . "sendToApi_eliminar(p);" . "}" . "}" . " " . "function confirmar(){" . " Ext.MessageBox.confirm('Desactivar', 'Desea eliminar esta caja?', eliminar_caja );" . "}"; $btn_eliminar->addOnClick("confirmar", $funcion_eliminar); $menu->addMenuItem($btn_eliminar); $page->addComponent($menu); } // // Forma de producto // $form = new DAOFormComponent($esta_caja); $form->setEditable(false); $form->hideField(array("id_caja", "id_cuenta_contable")); $form->createComboBoxJoin("id_sucursal", "descripcion", SucursalDAO::getAll(), $esta_caja->getIdSucursal()); $form->createComboBoxJoin("activa", "activa", array(array("id" => 0, "caption" => "No"), array("id" => 1, "caption" => "Si")), $esta_caja->getActiva()); $form->createComboBoxJoin("control_billetes", "control_billetes", array(array("id" => 0, "caption" => "No"), array("id" => 1, "caption" => "Si")), $esta_caja->getControlBilletes()); $form->createComboBoxJoin("abierta", "abierta", array(array("id" => 0, "caption" => "No"), array("id" => 1, "caption" => "Si")), $esta_caja->getAbierta()); $page->addComponent($form); if ($esta_caja->getControlBilletes()) { $page->addComponent(new TitleComponent("Billetes en esta caja", 3)); $tabla = new TableComponent(array("id_billete" => "Billete", "cantidad" => "Cantidad"), BilleteCajaDAO::search(new BilleteCaja(array("id_caja" => $_GET["cid"])))); function funcion_billete($id_billete) { return BilleteDAO::getByPK($id_billete) ? BilleteDAO::getByPK($id_billete)->getNombre() : "------"; } $tabla->addColRender("id_billete", "funcion_billete"); $tabla->addOnClick("id_billete", "(function(a){window.location = 'efectivo.billete.ver.php?bid='+a;})"); $page->addComponent($tabla); }
/** * Crea un pdf con el estado de cuenta de el cliente especificado * @param Array $args, $args['id_cliente'=>12[,'tipo_venta'=> 'credito | contado | saldo'] ], por default obtiene todas las compras del cliente */ public static function imprimirEstadoCuentaCliente($args) { //verificamos que se haya especificado el id del cliente if (!isset($args['id_cliente'])) { Logger::log("Error al obtener el estado de cuenta, no se ha especificado un cliente."); die('{"success": false, "reason": "Error al obtener el estado de cuenta, no se ha especificado un cliente."}'); } //verificamos que el cliente exista if (!($cliente = ClienteDAO::getByPK($args['id_cliente']))) { Logger::log("Error al obtener el estado de cuenta, no se tiene registro del cliente {$args['id_cliente']}."); die('{"success": false, "reason": "Error al obtener el estado de cuenta, no se tiene registro del cliente ' . $args['id_cliente'] . '"}'); } //obtenemos los datos del emisor $estado_cuenta = estadoCuentaCliente($args); //buscar los datos del emisor if (!($emisor = PosConfigDAO::getByPK('emisor'))) { Logger::log("no encuentro los datos del emisor"); die("no encuentro los datos del emisor"); } $emisor = json_decode($emisor->getValue())->emisor; $sucursal = SucursalDAO::getByPK($_SESSION['sucursal']); if (!$sucursal) { die("Sucursal invalida"); } include_once 'librerias/ezpdf/class.pdf.php'; include_once 'librerias/ezpdf/class.ezpdf.php'; $pdf = new Cezpdf(); $pdf->selectFont('../server/librerias/ezpdf/fonts/Helvetica.afm'); //margenes de un centimetro para toda la pagina $pdf->ezSetMargins(1, 1, 1, 1); /* * LOGO */ if (!($logo = PosConfigDAO::getByPK('url_logo'))) { Logger::log("Verifique la configuracion del pos_config, no se encontro el camṕo 'url_logo'"); die("Verifique la configuracion del POS, no se encontro el url del logo"); } //addJpegFromFile(imgFileName,x,y,w,[h]) //detectamos el tipo de imagen del logo if (substr($logo->getValue(), -3) == "jpg" || substr($logo->getValue(), -3) == "JPG" || substr($logo->getValue(), -4) == "jpeg" || substr($logo->getValue(), -4) == "JPEG") { $pdf->addJpegFromFile($logo->getValue(), puntos_cm(2), puntos_cm(25.5), puntos_cm(3.5)); } elseif (substr($logo->getValue(), -3) == "png" || substr($logo->getValue(), -3) == "PNG") { $pdf->addPngFromFile($logo->getValue(), puntos_cm(2), puntos_cm(25.5), puntos_cm(3.5)); } else { Logger::log("Verifique la configuracion del pos_config, la extension de la imagen del logo no es compatible"); die("La extension de la imagen usada para el logo del negocio no es valida."); } /* * ************************ * ENCABEZADO * ************************* */ $e = "<b>" . self::readableText($emisor->nombre) . "</b>\n"; $e .= formatAddress($emisor); $e .= "RFC: " . $emisor->rfc . "\n\n"; //datos de la sucursal $e .= "<b>Lugar de expedicion</b>\n"; $e .= self::readableText($sucursal->getDescripcion()) . "\n"; $e .= formatAddress($sucursal); $datos = array(array("emisor" => $e)); $pdf->ezSetY(puntos_cm(28.6)); $opciones_tabla = array(); $opciones_tabla['showLines'] = 0; $opciones_tabla['showHeadings'] = 0; $opciones_tabla['shaded'] = 0; $opciones_tabla['fontSize'] = 8; $opciones_tabla['xOrientation'] = 'right'; $opciones_tabla['xPos'] = puntos_cm(7.3); $opciones_tabla['width'] = puntos_cm(11); $opciones_tabla['textCol'] = array(0, 0, 0); $opciones_tabla['titleFontSize'] = 12; $opciones_tabla['rowGap'] = 3; $opciones_tabla['colGap'] = 3; $pdf->ezTable($datos, "", "", $opciones_tabla); $cajero = UsuarioDAO::getByPK($_SESSION['userid'])->getNombre(); $datos = array(array("col" => "<b>Cajero</b>"), array("col" => self::readableText($cajero)), array("col" => "<b>Cliente</b>"), array("col" => self::readableText($cliente->getRazonSocial())), array("col" => "<b>Limite de Credito</b>"), array("col" => FormatMoney($estado_cuenta->limite_credito, DONT_USE_HTML)), array("col" => "<b>Saldo</b>"), array("col" => FormatMoney($estado_cuenta->saldo, DONT_USE_HTML))); $pdf->ezSetY(puntos_cm(28.8)); $opciones_tabla['xPos'] = puntos_cm(12.2); $opciones_tabla['width'] = puntos_cm(6); $opciones_tabla['showLines'] = 0; $opciones_tabla['shaded'] = 2; $opciones_tabla['shadeCol'] = array(1, 1, 1); //$opciones_tabla['shadeCol2'] = array(0.054901961, 0.756862745, 0.196078431); $opciones_tabla['shadeCol2'] = array(0.8984375, 0.95703125, 0.99609375); $pdf->ezTable($datos, "", "", $opciones_tabla); //roundRect($pdf, puntos_cm(12.2), puntos_cm(28.8), puntos_cm(6), puntos_cm(4.25)); /** * ESTADO DE CUENTA */ $elementos = array(array('id_venta' => 'Venta', 'fecha' => 'Fecha', 'sucursal' => 'Sucursal', 'cajero' => 'Cajero', 'tipo_venta' => 'Tipo', 'tipo_pago' => 'Pago', 'total' => 'Total', 'pagado' => 'Pagado', 'saldo' => 'Saldo')); foreach ($estado_cuenta->array_ventas as $venta) { $array_venta = array(); $array_venta['id_venta'] = $venta['id_venta']; $array_venta['fecha'] = $venta['fecha']; $array_venta['sucursal'] = self::readableText($venta['sucursal']); $array_venta['cajero'] = self::readableText($venta['cajero']); $array_venta['cancelada'] = self::readableText($venta['cancelada']); $array_venta['tipo_venta'] = self::readableText($venta['tipo_venta']); $array_venta['tipo_pago'] = self::readableText($venta['tipo_pago']); $array_venta['total'] = FormatMoney($venta['total'], DONT_USE_HTML); $array_venta['pagado'] = FormatMoney($venta['pagado'], DONT_USE_HTML); $array_venta['saldo'] = FormatMoney($venta['saldo'], DONT_USE_HTML); array_push($elementos, $array_venta); } $pdf->ezText("", 8, array('justification' => 'center')); $pdf->ezSetY(puntos_cm(24)); $opciones_tabla['xPos'] = puntos_cm(2); $opciones_tabla['width'] = puntos_cm(16.2); $pdf->ezTable($elementos, "", "Estado de Cuenta", $opciones_tabla); //roundRect($pdf, puntos_cm(2), puntos_cm(24.3), puntos_cm(16.2), puntos_cm(3.2)); /* * ************************ * notas de abajo * ************************* */ $pdf->setLineStyle(1); $pdf->setStrokeColor(0.3359375, 0.578125, 0.89453125); $pdf->line(puntos_cm(2), puntos_cm(1.3), puntos_cm(18.2), puntos_cm(1.3)); $pdf->addText(puntos_cm(2), puntos_cm(1.0), 7, "Fecha de impresion: " . date("d/m/y") . " " . date("H:i:s")); //addJpegFromFile(imgFileName,x,y,w,[h]) //$pdf->addJpegFromFile("../www/media/logo_simbolo.jpg", puntos_cm(15.9), puntos_cm(.25), 25); $pdf->addText(puntos_cm(16.7), puntos_cm(0.6), 8, "caffeina.mx"); $pdf->ezStream(); }
/** *Lista los productos por empresa, almacen y lote */ public static function listarProductosLote($activo = null, $id_almacen = null, $id_empresa = null) { //objeto que se regresara $company = new stdClass(); //contiene todas las empresas $company->empresas = array(); //obtenemos todas las empresas $empresas = EmpresaDAO::getAll(); //iteramos las empresas para obtener sus almacenes foreach ($empresas as $empresa) { //insertamos la empresa a la compañia $e = new stdClass(); $e->id_empresa = $empresa->getIdEmpresa(); $e->nombre = $empresa->getRazonSocial(); $e->almacenes = array(); $almacenes = AlmacenDAO::search(new Almacen(array("id_empresa" => $empresa->getIdEmpresa()))); //iteramos todos los almacenes de la empresa foreach ($almacenes as $almacen) { $a = new stdClass(); $a->id_almacen = $almacen->getIdAlmacen(); $a->nombre = $almacen->getNombre(); $a->id_sucursal = $almacen->getIdSucursal(); $a->sucursal = SucursalDAO::getByPK($a->id_sucursal)->getRazonSocial(); $a->lotes = array(); //obtenemos todos los lotes del almacen $lotes = LoteDAO::search(new Lote(array("id_almacen" => $almacen->getIdAlmacen()))); //iteramos todos los lotes del almacen foreach ($lotes as $lote) { $l = new StdClass(); $l->id_lote = $lote->getIdLote(); $l->id_almacen = $lote->getIdAlmacen(); $l->folio = $lote->getFolio(); $l->lotes_producto = array(); //obtenemos todos los productos de un lote $lotes_producto = LoteProductoDAO::search(new LoteProducto(array("id_lote" => $lote->getIdLote()))); //iteramos lodos los lotes con producto que perteneces al lote foreach ($lotes_producto as $lote_producto) { $producto = ProductoDAO::getByPK($lote_producto->getIdProducto()); $lp = new StdClass(); $lp->id_lote = $lote_producto->getIdLote(); $lp->id_producto = $lote_producto->getIdProducto(); $lp->cantidad = $lote_producto->getCantidad(); $lp->id_unidad = $lote_producto->getIdUnidad(); $lp->unidad = UnidadMedidaDAO::getByPK($lp->id_unidad)->getAbreviacion(); //$lp->recalculo = ProductoDAO::ExistenciasTotales($lp->id_producto); $lp->recalculo = ProductoDAO::ExistenciasLote($lp->id_producto, $lp->id_lote, $lp->id_unidad); $lp->nombre = $producto->getNombreProducto(); $lp->codigo = $producto->getCodigoProducto(); array_push($l->lotes_producto, $lp); } array_push($a->lotes, $l); } array_push($e->almacenes, $a); } array_push($company->empresas, $e); } return $company; }
['Alice', 'Mike', ''], ['Bob', 'Jim', 'Bob Sponge'], ['Carol', 'Bob', ''], ['Carol2', 'Bob', ''] */ <?php $empresas = EmpresaDAO::getAll(); //iterar empresas foreach ($empresas as $e) { echo "[ { v: '" . $e->getRazonSocial() . "', f: '<div>Empresa</div>" . $e->getRazonSocial() . "' } , '' ],\n "; //buscar sucursales de compui $id_sucursales = SucursalEmpresaDAO::search(new SucursalEmpresa(array("id_empresa" => $e->getIdEmpresa()))); //iterear sucursales foreach ($id_sucursales as $id_s) { $s = SucursalDAO::getByPK($id_s->getIdSucursal()); echo "/* sucursal, empresa */[ { v: '" . $s->getRazonSocial() . "', f: '<div>Sucursal</div>" . $s->getRazonSocial() . "' } , '" . $e->getRazonSocial() . "' ], \n"; //iterar almacenes $almacenes = AlmacenDAO::search(new Almacen(array("id_almacen"))); foreach ($almacenes as $a) { echo "/* almacen, sucursal */ [ { v: '" . $a->getNombre() . "', f: '<div>Almacen</div>" . $a->getNombre() . "' }, '" . $s->getRazonSocial() . "' ], \n"; //lotes de esa sucursal $lotes = LoteDAO::search(new Lote(array("id_almacen" => $a->getIdAlmacen()))); foreach ($lotes as $l) { echo "/* lote, almacen */[ { v: '" . $l->getFolio() . "', f: '<div>Lote</div>" . $l->getFolio() . "' }, '" . $a->getNombre() . "' ], \n"; } } //for-each sucursales } //for-each id_sucursales }
private static function validarParametrosSeguimiento($id_seguimiento_de_servicio = null, $id_orden_de_servicio = null, $id_localizacion = null, $estado = null) { //valida que el seguimiento exista if (!is_null($id_seguimiento_de_servicio)) { $seguimiento = SeguimientoDeServicioDAO::getByPK($id_seguimiento_de_servicio); if (is_null($seguimiento)) { return "El seguimiento " . $id_seguimiento_de_servicio . " no existe"; } } //valida que la orden de servicio exista y este activa if (!is_null($id_orden_de_servicio)) { $orden_de_servicio = OrdenDeServicioDAO::getByPK($id_orden_de_servicio); if (is_null($orden_de_servicio)) { return "La orden de servicio " . $id_orden_de_servicio . " no existe"; } if (!$orden_de_servicio->getActiva()) { return "La orden de servicio " . $id_orden_de_servicio . " esta desactivada"; } } //valida que la localizacion sea una sucursal valida o sea un -1 para indicar que esta en movimiento if (!is_null($id_localizacion)) { $sucursal = SucursalDAO::getByPK($id_localizacion); if (is_null($sucursal) && $id_localizacion != -1) { return "La localizacion " . $id_localizacion . " no es valida"; } } //valida que el estado este en rango if (!is_null($estado)) { $e = self::validarLongitudDeCadena($estado, 255, "estado"); if (is_string($e)) { return $e; } } //No se encontro error return true; }
/** * Desactivar Almacen */ public function testDesactivarAlmacen() { POSController::DropBd(); $usuario = UsuarioDAO::getAll(); if (sizeof($usuario) == 0) { Logger::error("WHOOOT no hay usuarios en la BD"); return; } $id_usuario = $usuario[0]->getIdUsuario(); @DireccionDAO::save($direccion = new Direccion(array("calle" => "Una Calle", "numero_exterior" => "322", "id_ciudad" => "12", "codigo_postal" => "38000", "ultima_modificacion" => "2012-02-21 22:10:45", "id_usuario_ultima_modificacion" => "2"))); @EmpresaDAO::save($empresa = new Empresa(array("id_direccion" => $direccion->getIdDireccion(), "rfc" => "RFC_" . time(), "razon_social" => "Empresa_Razon_Social__" . time(), "fecha_alta" => "2012-02-21 22:10:45", "activo" => 1, "direccion_web" => "Dir_" . time()))); @SucursalDAO::save($sucursal = new Sucursal(array("id_direccion" => $direccion->getIdDireccion(), "razon_social" => "Sucursal_Razon_Social__" . time(), "saldo_a_favor" => 2000, "fecha_apertura" => "2012-02-21 22:10:45", "activa" => 1))); $tipo_almacen = AlmacenesController::NuevoTipo("Nuevo_Tipo_Almacen___" . time()); Logger::log("Nuevo almacen"); $almacen = AlmacenesController::Nuevo($id_empresa = $empresa->getIdEmpresa(), $id_sucursal = $sucursal->getIdSucursal(), $id_tipo_almacen = $tipo_almacen["id_tipo_almacen"], $nombre = "Almacen_Editar" . time(), $descripcion = "Almacen de prueba_ " . time()); // Desactivamos el Almacen Logger::log("A desactivar almacen recien creado"); $almacen_desactivado = AlmacenesController::Desactivar($id_almacen = $almacen["id_almacen"]); $_almacen = AlmacenDAO::getByPK($almacen["id_almacen"]); $this->assertEquals(0, $_almacen->getActivo()); }
$btn_eliminar = new MenuItem("Desactivar este almacen", null); $btn_eliminar->addApiCall("api/sucursal/almacen/eliminar", "GET"); $btn_eliminar->onApiCallSuccessRedirect("sucursales.lista.almacen.php"); $btn_eliminar->addName("eliminar"); $funcion_eliminar = " function eliminar_almacen(btn){" . "if(btn == 'yes')" . "{" . "var p = {};" . "p.id_almacen = " . $_GET["aid"] . ";" . "sendToApi_eliminar(p);" . "}" . "}" . " " . "function confirmar(){" . " Ext.MessageBox.confirm('Desactivar', 'Desea eliminar este almacen?', eliminar_almacen );" . "}"; $btn_eliminar->addOnClick("confirmar", $funcion_eliminar); $menu->addMenuItem($btn_eliminar); $page->addComponent($menu); } // // Forma de producto // $form = new DAOFormComponent($este_almacen); $form->setEditable(false); $form->hideField(array("id_almacen")); $form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::getAll(), $este_almacen->getIdSucursal()); $form->createComboBoxJoin("id_empresa", "razon_social", EmpresaDAO::search(new Empresa(array("activo" => 1))), $este_almacen->getIdEmpresa()); $form->createComboBoxJoin("id_tipo_almacen", "descripcion", TipoAlmacenDAO::getAll(), $este_almacen->getIdTipoAlmacen()); $page->addComponent($form); $page->addComponent(new TitleComponent("Productos en este almacen"), 3); $tabla = new TableComponent(array("id_producto" => "Producto", "id_unidad" => "Unidad", "cantidad" => "Cantidad"), ProductoAlmacenDAO::search(new ProductoAlmacen(array("id_almacen" => $_GET["aid"])))); function funcion_producto($id_producto) { return ProductoDAO::getByPK($id_producto) ? ProductoDAO::getByPK($id_producto)->getNombreProducto() : "--------"; } function funcion_unidad($id_unidad) { return UnidadDAO::getByPK($id_unidad) ? UnidadDAO::getByPK($id_unidad)->getNombre() : "---------"; } $tabla->addColRender("id_producto", "funcion_producto"); $tabla->addColRender("id_unidad", "funcion_unidad");
/** * *Muestra los productos y/o servicios englobados en este paquete as? como las sucursales y las empresas donde lo ofrecen * * @param id_paquete int Id del paquete a visualizar sus detalles * @return detalle_paquete json Informacion del detalle del paquete **/ public static function Detalle($id_paquete) { Logger::log("consiguiendo los detalles del paquete"); //valida que el paquete exista $paquete = PaqueteDAO::getByPK($id_paquete); if (is_null($paquete)) { Logger::error("El paquete " . $id_paquete . " no existe"); throw new Exception("El paquete " . $id_paquete . " no existe"); } //En el primer campo de un arreglo se almacena el paquete en sí, en el segundo las empresas en las que esta disponible el paquete, //en el tercero las sucursales en las que esta disponible, en el cuarto los productos que contiene y en el quinto los servicios $detalle_paquete = array(); array_push($detalle_paquete, $paquete); $empresas = array(); $paquetes_empresa = PaqueteEmpresaDAO::search(new PaqueteEmpresa(array("id_paquete" => $id_paquete))); foreach ($paquetes_empresa as $paquete_empresa) { array_push($empresas, EmpresaDAO::getByPK($paquete_empresa->getIdEmpresa())); } array_push($detalle_paquete, $empresas); $sucursales = array(); $paquetes_sucursal = PaqueteSucursalDAO::search(new PaqueteSucursal(array("id_paquete" => $id_paquete))); foreach ($paquetes_sucursal as $paquete_sucursal) { array_push($sucursales, SucursalDAO::getByPK($paquete_sucursal->getIdSucursal())); } array_push($detalle_paquete, $sucursales); $productos = array(); $productos_paquete = ProductoPaqueteDAO::search(new ProductoPaquete(array("id_paquete" => $id_paquete))); foreach ($productos_paquete as $producto_paquete) { array_push($productos, ProductoDAO::getByPK($producto_paquete->getIdProducto())); } array_push($detalle_paquete, $productos); $servicios = array(); $servicios_paquete = OrdenDeServicioPaqueteDAO::search(new OrdenDeServicioPaquete(array("id_paquete" => $id_paquete))); foreach ($servicios_paquete as $servicio_paquete) { array_push($servicios, ServicioDAO::getByPK($servicio_paquete->getIdServicio())); } array_push($detalle_paquete, $servicios); Logger::log("Detalle de paquete " . $id_paquete . " conseguido exitosamente con " . count($empresas) . "\n empresas, " . count($sucursales) . " sucursales, " . count($productos) . " productos y " . count($servicios) . " servicios"); return $detalle_paquete; }
$page->addComponent(new TitleComponent("Editando a " . $este_cliente->getNombre(), 2)); $page->nextTab("General"); $form = new DAOFormComponent($este_cliente); $form->hideField(array("id_usuario", "id_rol", "id_clasificacion_proveedor", "id_direccion", "id_direccion_alterna", "fecha_asignacion_rol", "comision_ventas", "fecha_alta", "fecha_baja", "activo", "last_login", "salario", "dias_de_embarque", "consignatario", "tiempo_entrega", "cuenta_bancaria", "mensajeria", "token_recuperacion_pass", "ventas_a_credito", "dia_de_pago", "dia_de_revision", "id_clasificacion_cliente")); $form->renameField(array("id_usuario" => "id_cliente")); $form->sendHidden("id_cliente"); $form->setValueField("password", ""); $form->createComboBoxJoin("id_moneda", "nombre", MonedaDAO::search(new Moneda(array("activa" => 1))), $este_cliente->getIdMoneda()); $clasificaciones = ContactosController::BuscarCategoria(); $clasificaciones = $clasificaciones['categorias']; foreach ($clasificaciones as $key => $clasificacion) { $clasificacion->caption = $clasificacion->nombre; $clasificaciones[$key] = $clasificacion->asArray(); } $form->createComboBoxJoin('id_categoria_contacto', 'nombre', $clasificaciones); $form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::search(new Sucursal(array("activa" => 1))), $este_cliente->getIdSucursal()); $form->createComboBoxJoinDistintName("id_tarifa_venta", "id_tarifa", "nombre", TarifaDAO::search(new Tarifa(array("tipo_tarifa" => "venta")))); $form->createComboBoxJoin("id_tarifa_compra", "nombre", TarifaDAO::search(new Tarifa(array("tipo_tarifa" => "compra")))); $form->createComboBoxJoin("tarifa_compra_obtenida", "tarifa_compra_obtenida", array("rol", "proveedor", "cliente", "usuario")); $form->createComboBoxJoin("tarifa_venta_obtenida", "tarifa_venta_obtenida", array("rol", "proveedor", "cliente", "usuario")); $form->addApiCall("api/cliente/editar/", "POST"); $form->onApiCallSuccessRedirect("clientes.ver.php?cid=" . $_GET["cid"]); $form->renameField(array("nombre" => "razon_social", "codigo_usuario" => "codigo_cliente", "correo_electronico" => "email", "id_categoria_contacto" => "clasificacion_cliente", "id_moneda" => "moneda_del_cliente", "pagina_web" => "sitio_web", "id_sucursal" => "sucursal")); $page->addComponent($form); $page->nextTab("Otros"); //buscar los parametros extra $out = ExtraParamsValoresDAO::getVals("usuarios", $este_cliente->getIdUsuario()); $epform = new FormComponent(); $epform->setEditable(true); foreach ($out as $ep) { $epform->addField($ep["campo"], $ep["caption"], $ep["tipo"], $ep["val"]);
/** * * Ver la lista de productos y sus existencias, se puede filtrar por empresa, sucursal, almac?n, y lote. Se puede ordenar por los atributos de producto. * * @param existencia_mayor_que float Se regresaran los productos cuya existencia sea mayor a la especificada por este valor * @param existencia_igual_que float Se regresaran los productos cuya existencia sea igual a la especificada por este valor * @param existencia_menor_que float Se regresaran los productos cuya existencia sea menor a la especificada por este valor * @param id_empresa int Id de la empresa de la cual se vern los productos. * @param id_sucursal int Id de la sucursal de la cual se vern los productos. * @param id_almacen int Id del almacen del cual se vern los productos. * @param activo bool Si es true, mostrar solo los productos que estn activos, si es false mostrar solo los productos que no lo sean. * @param id_lote int Id del lote del cual se veran los productos en existencia * @return existecias json Lista de existencias * */ public static function Existencias($id_almacen = null, $id_empresa = null, $id_producto = null, $id_sucursal = null) { $e = AlmacenDAO::Existencias(); return array("resultados" => $e, "numero_de_resultados" => sizeof($e)); $daoProductos = ProductoDAO::getAll(); $aOut = array(); $daoAlmacenes = AlmacenDAO::getAll(); for ($iProd = 0; $iProd < sizeof($daoProductos); $iProd++) { //por cada almacen for ($iAl = 0; $iAl < sizeof($daoAlmacenes); $iAl++) { //buscar sus lotes } array_push($aOut, $daoProductos[$iProd]->asArray()); } return array("numero_de_resultados" => sizeof($aOut), "resultados" => $aOut); //Si se recibe un id producto, solo se listan las existencias de dicho producto, se puede combinar con //los demas parametros. Si no se recibe ningun otro, se realiza un acumulado de este producto en todos los almacenes. // //Si se recibe un id almacen, solo se listan las existencias de dicho almacen // //Si se recibe la variable id_empresa o id_sucursal, se listara un acumulado de todos los productos //con las cantidades de productos de los diferentes almacenes dentro de ella // //Cuando se recibe alguno de ellos, primero se consiguen todos los almacenes que le pertencen, despues //se consiguen todos los productos de cada almacen y se guardan en un arreglo temporal que despues es ordenado. //EL arreglo ordenado es el que se envia. // //Si no se recibe ningun parametro, se listaran todos los productos existentes en todos los almacenes $productos_almacenes = array(); //Si solo se especifica un producto, se regresa un arreglo con las sucursales donde esta ese producto y //la cantidad total en cada una if (!is_null($id_producto) && is_null($id_almacen) && is_null($id_empresa) && is_null($id_sucursal)) { //Se obtienen todas las sucursales y se llama recursivamente a este metodo $sucursales = SucursalDAO::search(new Sucursal(array("activa" => 1))); $result = array(); foreach ($sucursales as $sucursal) { $p_a = self::Existencias(null, null, $id_producto, $sucursal->getIdSucursal()); if ($p_a["numero_de_resultados"] > 0) { foreach ($p_a["resultados"] as $p) { $result["id_sucursal"] = $sucursal->getIdSucursal(); $suc = SucursalDAO::getByPK($sucursal->getIdSucursal()); $result["nombre_sucursal"] = $suc->getDescripcion(); $result["id_producto"] = $p->getIdProducto(); $result["id_unidad"] = $p->getIdUnidad(); $result["cantidad"] = $p->getCantidad(); array_push($productos_almacenes, $result); } } } } else { if (!is_null($id_almacen)) { //Se buscan los registros de productos que cumplan con el almacen y con el producto recibidos $productos_almacenes = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $id_almacen, "id_producto" => $id_producto))); } else { if (!is_null($id_empresa)) { //Se obtienen todos los almacenes de la empresa $almacenes_empresa = AlmacenDAO::search(new Almacen(array("id_empresa" => $id_empresa))); $productos_almacenes_empresa = array(); //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que seacarlos //de su arreglo y ponerlos en un arreglo general foreach ($almacenes_empresa as $almacen_empresa) { //Se obtiene el arreglo de productos $productos_almacen_empresa = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen_empresa->getIdAlmacen(), "id_producto" => $id_producto))); //Se vacía el arreglo en uno general foreach ($productos_almacen_empresa as $producto_almacen_empresa) { array_push($productos_almacenes_empresa, $producto_almacen_empresa); } } //Se agrupan los productos iguales $productos_almacenes = self::AgruparProductos($productos_almacenes_empresa); } else { if (!is_null($id_sucursal)) { //Se obtienen todos los almacenes de la sucursal $almacenes_sucursal = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal))); $productos_almacenes_sucursal = array(); //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que sacarlos //de su arreglo y ponerlos en un arreglo general foreach ($almacenes_sucursal as $almacen_sucursal) { //Se obtiene el arreglo de productos $productos_almacen_sucursal = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen_sucursal->getIdAlmacen(), "id_producto" => $id_producto))); //Se vacía el arreglo en uno general foreach ($productos_almacen_sucursal as $producto_almacen_sucursal) { array_push($productos_almacenes_sucursal, $producto_almacen_sucursal); } } //Se agrupan los productos iguales $productos_almacenes = self::AgruparProductos($productos_almacenes_sucursal); } else { //Se obtienen todos los almacenes $almacenes = AlmacenDAO::getAll(); $productos_almacen = array(); //Se recorre cada almacen y se obtiene un arreglo de sus productos, para poder agruparlos, tenemos que sacarlos //de su arreglo y ponerlos en un arreglo general foreach ($almacenes as $almacen) { //Se obtiene el arreglo de productos $productos_a = LoteProductoDAO::search(new LoteProducto(array("id_almacen" => $almacen->getIdAlmacen(), "id_producto" => $id_producto))); //Se vacía el arreglo en uno general foreach ($productos_a as $p_a) { array_push($productos_almacen, $p_a); } } //Se agrupan los productos iguales $productos_almacenes = self::AgruparProductos($productos_almacen); } } } } Logger::log("Se listan " . count($productos_almacenes) . " registros"); $existencias = array("resultados" => $productos_almacenes, "numero_de_resultados" => count($productos_almacenes)); return $existencias; }
/** *Detalles($id_empresa) * *Muestra los detalles de una empresa en especifico. * * @author Juan Manuel García Carmona <*****@*****.**> * @param id_empresa int Id de la empresa **/ public static function Detalles($id_empresa) { //verificamos si la empresa a consular existe if (!($empresa = EmpresaDAO::getByPK($id_empresa))) { Logger::error("No se tiene registro de la empresa {$id_empresa}"); throw new InvalidDataException("No se tiene registro de la empresa {$id_empresa}"); } //extraemos su domicilio fiscal if (!($direccion = DireccionDAO::getByPK($empresa->getIdDireccion()))) { $direccion = new stdClass(); } //relacionamos a la empresa con la direccion $empresa->direccion = $direccion; //obtenemos el logo $logo = LogoDAO::getByPK($empresa->getIdLogo()); if ($logo === NULL) { $logo = LogoDAO::getByPK(-1); } $empresa->logo = $logo->getImagen(); //obtenemos su contabilidad $contabilidad = array(); $contabilidad["moneda_base"] = EmpresaDAO::getMonedaBase($empresa->getIdEmpresa()); $contabilidad["ejercicio"] = EmpresaDAO::getEjercicioActual($empresa->getIdEmpresa()); //extraemos sus sucursales $sucursales = array(); $sucursales_empresa = SucursalEmpresaDAO::search(new SucursalEmpresa(array("id_empresa" => $id_empresa))); foreach ($sucursales_empresa as $sucursal_empresa) { if ($sucursal = SucursalDAO::getByPK($sucursal_empresa->getIdSucursal())) { array_push($sucursales, $sucursal); } } //obtenemos todos los impuestos relacionados a la empresa $impuestos_empresa = ImpuestoEmpresaDAO::search(new ImpuestoEmpresa(array("id_empresa" => $id_empresa))); //extraemos sus impuestos de compra $impuestos_compra = array(); foreach ($impuestos_empresa as $impuesto_compra_empresa) { if (!($impuesto = ImpuestoDAO::getByPK($impuesto_compra_empresa->getIdImpuesto()))) { Logger::warn("No se tiene registro de un impuesto con id = " . $impuesto_compra_empresa->getIdImpuesto()); throw new InvalidDataException("No se tiene registro de un impuesto con id = " . $impuesto_compra_empresa->getIdImpuesto()); } if ($impuesto->getAplica() === "compra" || $impuesto->getAplica() === "ambos") { array_push($impuestos_compra, $impuesto); } } //extraemos sus impuestos de venta $impuestos_venta = array(); foreach ($impuestos_empresa as $impuesto_venta_empresa) { if (!($impuesto = ImpuestoDAO::getByPK($impuesto_venta_empresa->getIdImpuesto()))) { Logger::warn("No se tiene registro de un impuesto con id = " . $impuesto_venta_empresa->getIdImpuesto()); throw new InvalidDataException("No se tiene registro de un impuesto con id = " . $impuesto_venta_empresa->getIdImpuesto()); } if ($impuesto->getAplica() === "venta" || $impuesto->getAplica() === "ambos") { array_push($impuestos_venta, $impuesto); } } return array("detalles" => $empresa, "sucursales" => $sucursales, "impuestos_compra" => $impuestos_compra, "impuestos_venta" => $impuestos_venta, "contabilidad" => $contabilidad); Logger::log("Detalles de la empresa enviados con exito"); }
<?php define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); // Parametros necesarios $page->requireParam("sid", "GET", "Esta sucursal no existe."); $esta_sucursal = SucursalDAO::getByPK($_GET["sid"]); $esta_direccion = DireccionDAO::getByPK($esta_sucursal->getIdDireccion()); // Titulo de la pagina $page->addComponent(new TitleComponent("Editar sucursal " . $esta_sucursal->getDescripcion(), 2)); //forma de nueva empresa $sucursal_form = new DAOFormComponent($esta_sucursal); $sucursal_form->hideField(array("id_sucursal", "id_direccion", "fecha_apertura", "fecha_baja")); $sucursal_form->renameField(array("id_gerente" => "id_usuario")); $sucursal_form->createComboBoxJoin("id_usuario", "nombre", UsuarioDAO::getAll(), $esta_sucursal->getIdGerente()); $sucursal_form->createComboBoxJoin("id_tarifa", "nombre", TarifaDAO::getAll(), $esta_sucursal->getIdTarifa()); $sucursal_form->createComboBoxJoin("activa", "activa", array(array("id" => false, "caption" => "No"), array("id" => true, "caption" => "Sí")), $esta_sucursal->getActiva()); $page->addComponent($sucursal_form); $page->addComponent(new TitleComponent("Direccion", 3)); $direccion_form = new DAOFormComponent($esta_direccion); $direccion_form->hideField(array("id_direccion", "ultima_modificacion", "id_usuario_ultima_modificacion")); $direccion_form->createComboBoxJoin("id_ciudad", "nombre", CiudadDAO::getAll(), $esta_direccion->getIdDireccion()); $direccion_form->renameField(array("id_ciudad" => "ciudad")); $js = "(function(){\n\t\t\t\tPOS.API.POST(\"api/sucursal/editar/\",{\n\t\t\t\t\tid_sucursal\t\t: " . $_GET['sid'] . ",\n\t\t\t\t\tdescripcion\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "descripcion\").getValue(),\n\t\t\t\t\tid_gerente\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "id_usuario\").getValue(),\n\t\t\t\t\tid_tarifa\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "id_tarifa\").getValue(),\n\t\t\t\t\tactivo\t\t\t: Ext.get(\"" . $sucursal_form->getGuiComponentId() . "activa\").getValue(),\n\t\t\t\t\tdireccion : Ext.JSON.encode({\n\t\t\t\t\t\t \tcalle\t\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "calle\").getValue(),\n\t\t\t\t\t\t\tnumero_exterior\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "numero_exterior\").getValue(),\n\t\t\t\t\t\t numero_interior\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "numero_interior\").getValue(),\n\t\t\t\t\t\t colonia\t\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "colonia\").getValue(),\n\t\t\t\t\t\t codigo_postal\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "codigo_postal\").getValue(),\n\t\t\t\t\t\t telefono1\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "telefono\").getValue(),\n\t\t\t\t\t\t telefono2\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "telefono2\").getValue(),\n\t\t\t\t\t\t id_ciudad\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "ciudad\").getValue(),\n\t\t\t\t\t\t referencia\t\t: Ext.get(\"" . $direccion_form->getGuiComponentId() . "referencia\").getValue()\n\t\t\t\t\t})\n\t\t\t\t},{ callback : function(a,b){\n\t\t\t\t\twindow.onbeforeunload = function(){ return;\t};\n\t\t\t\t\twindow.location = \"sucursales.ver.php?sid=\"+ " . $_GET['sid'] . ";\n\t\t\t\t}});\n\t\t\t})()"; $direccion_form->addOnClick("Editar sucursal", $js); $page->addComponent($direccion_form); $page->render();
* Description: * * * Author: * Manuel Garcia (manuel) * Alan Gonzalez (alan) * ***/ define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); $page->requireParam("sid", "GET", "Esta sucursal no existe."); /* ********************************************************************* * Corte * ********************************************************************* */ $sucursal = SucursalDAO::getByPK($_GET['sid']); if (is_null($sucursal)) { $page->render(); exit; } $page->addComponent(new TitleComponent("Sucursal " . $sucursal->getDescripcion(), 1)); $table = "<table>"; $cortes = EfectivoController::UltimoCorte($sucursal); if (!is_null($cortes)) { $fecha_inicial = $cortes->getFin(); } else { $fecha_inicial = $sucursal->getFechaApertura(); } $fecha_final = time(); $table .= " <tr>"; $table .= td("<b>Corte</b>");
public function testEditar() { //creamos una sucursal para fines del experimento $direccion = array("calle" => "Monte Balcanes", "numero_exterior" => "107", "numero_interior" => null, "colonia" => "Arboledas", "codigo_postal" => "38060", "id_ciudad" => 334, "referencia" => "Calle cerrada", "telefono1" => "4616149974", "telefono2" => "45*451*454"); $sucursal = SucursalesController::Nueva("Sucursal de phpunit editar " . time(), $direccion, 1, 1, null); //para cambiar la moneda try { $moneda = new Moneda(array("nombre" => "Moneda_" . time(), "simbolo" => "Simbolo_" . time(), "activa" => 1)); MonedaDAO::save($moneda); } catch (Exception $e) { } //editar basico SucursalesController::Editar($id_sucursal = $sucursal["id_sucursal"], $activo = 0, $descripcion = "Descripcion de la sucursal", $direccion = null, $empresas = null, $id_gerente = 1, $id_moneda = $moneda->getIdMoneda(), $razon_social = "Empresa x", $saldo_a_favor = "100000"); //editar la direccion SucursalesController::Editar($id_sucursal = $sucursal["id_sucursal"], $activo = 0, $descripcion = "_EDITADO_" . time(), $direccion = array("calle" => "Monte Balcanes", "numero_exterior" => "107", "colonia" => "Arboledas", "id_ciudad" => 334, "codigo_postal" => "38060", "numero_interior" => null, "texto_extra" => "Calle cerrada", "telefono1" => "4616149974", "telefono2" => "45*451*454"), $empresas = null, $id_gerente = 1, $id_moneda = $moneda->getIdMoneda(), $razon_social = "Empresa x", $saldo_a_favor = "100000"); //vamos a ver si si se edito esa madre $_s = SucursalDAO::getByPK($sucursal["id_sucursal"]); $this->assertEquals($descripcion, $_s->getDescripcion()); $_d = DireccionDAO::getByPK($_s->getIdDireccion()); $this->assertEquals($_d->getCalle(), "Monte Balcanes"); $this->assertEquals($_d->getNumeroExterior(), "107"); $this->assertEquals($_d->getColonia(), "Arboledas"); $this->assertEquals($_d->getIdCiudad(), 334); $this->assertEquals($_d->getCodigoPostal(), "38060"); //$this->assertEquals($_d->getTextoExtra(), "Calle cerrada"); }
/** * * * Returns: * Object of type CorteDeSucursal which is the last time this happened. * May return null otherwise. * ***/ private static function UltimoCorteSucursal($sucursal) { if (!$sucursal instanceof Sucursal) { throw new InvalidDataException("Argument must be instance of Sucursal"); } else { $v_sucursal = SucursalDAO::getByPK($sucursal->getIdSucursal()); } if (is_null($v_sucursal)) { throw new InvalidDataException("Sucursal does not exist"); } $cortes = CorteDeSucursalDAO::search(new CorteDeSucursal($v_sucursal->AsArray()), "fin", "desc"); if (sizeof($cortes) == 0) { return null; } return $cortes[0]; }
function renderCmp() { ?> <script> Ext.require([ 'Ext.data.*', 'Ext.form.*', 'Ext.grid.*', 'Ext.util.*', 'Ext.state.*' ]); var grid, unidadMedida; /* ******************************************************** /\ \ /\ \ /\ \ /\ \ ___ /\ \ /\ \ /::\ \ /::\ \ /::\ \ /::\ \ /\ \ \:\ \ /::\ \ /:/\:\ \ /:/\:\ \ /:/\:\ \ /:/\:\ \ \:\ \ \:\ \ /:/\:\ \ /:/ \:\ \ /::\~\:\ \ /::\~\:\ \ /::\~\:\ \ /::\__\ /::\ \ /:/ \:\ \ /:/__/ \:\__\ /:/\:\ \:\__\ /:/\:\ \:\__\ /:/\:\ \:\__\ __/:/\/__/ /:/\:\__\ /:/__/ \:\__\ \:\ \ \/__/ \/__\:\/:/ / \/_|::\/:/ / \/_|::\/:/ / /\/:/ / /:/ \/__/ \:\ \ /:/ / \:\ \ \::/ / |:|::/ / |:|::/ / \::/__/ /:/ / \:\ /:/ / \:\ \ /:/ / |:|\/__/ |:|\/__/ \:\__\ \/__/ \:\/:/ / \:\__\ /:/ / |:| | |:| | \/__/ \::/ / \/__/ \/__/ \|__| \|__| \/__/ * ******************************************************** */ var actualizar_carrito = function(){ console.group("ACTUALIZAR CARRITO"); console.log("Actualizando el carrito..."); // // Actualizar la tabla de productos // seleccionados // grid.getView().refresh(); // // Calcular precios e importes // var carrito_store_count = carrito_store.count(); var subtotal = 0; var tarifaActual = 1; tarifaActual = Ext.get("tarifa_seleccionada").getValue(); console.log("la tarifa actual es :" + tarifaActual); for (var i=0; i < carrito_store_count; i++) { var p = carrito_store.getAt(i); var tarifasProducto = p.get("tarifas"); for (var j=0; j < tarifasProducto.length; j++) { if(tarifasProducto[j].id_tarifa == tarifaActual){ console.log("ya encontre el precio de esta tarifa"); subtotal += parseFloat( tarifasProducto[j].precio ) * parseFloat( p.get("cantidad") ) ; break; } } }; data = retriveData(); //subotal sin descuento Ext.get("carrito_subtotal").update(Ext.util.Format.usMoney( data.subtotal + data.descuento )); //total descontado Ext.get("carrito_descuento").update( "-" + Ext.util.Format.usMoney( data.descuento )); //impuesto Ext.get("carrito_impuesto").update("+" + Ext.util.Format.usMoney( data.impuesto )); //total Ext.get("carrito_total").update(Ext.util.Format.usMoney( data.subtotal + data.impuesto )); // // Buscar existencias // if(sucursal_seleccionada !== null){ // // si hay una sucursal seleccionada // podemos calcular si hay existencias // for (var i=0; i < carrito_store_count; i++) { var p = carrito_store.getAt(i); var existencias = p.get("existencias"); var found_existencias = false; for (var ei=0; ei < existencias.length; ei++) { // // buscar la sucursal que // tengo seleccionada // if( existencias[ei].id_sucursal == sucursal_seleccionada ){ console.log(existencias[ei].id_sucursal, sucursal_seleccionada) found_existencias = true; if( p.get("cantidad") > existencias[ei].cantidad ){ console.warn("se necesitan" + p.get("cantidad") + " pero solo tengo "+ existencias[ei].cantidad); }else{ console.log("quiero " + p.get("cantidad") + " y tengo "+ existencias[ei].cantidad); } break; } } if(found_existencias === false){ console.warn("No hay ningun tipo de existencias"); } }; }//if(sucursal) console.groupEnd(); } /* **************************************************************************************************************** ___ ___ ___ ___ ___ ___ ___ /\ \ /\__\ ___ /\ \ /\__\ /\ \ /\ \ /\ \ /::\ \ /:/ / /\ \ /::\ \ /::| | \:\ \ /::\ \ /::\ \ /:/\:\ \ /:/ / \:\ \ /:/\:\ \ /:|:| | \:\ \ /:/\:\ \ /:/\ \ \ /:/ \:\ \ /:/ / /::\__\ /::\~\:\ \ /:/|:| |__ /::\ \ /::\~\:\ \ _\:\~\ \ \ /:/__/ \:\__\ /:/__/ __/:/\/__/ /:/\:\ \:\__\ /:/ |:| /\__\ /:/\:\__\ /:/\:\ \:\__\ /\ \:\ \ \__\ \:\ \ \/__/ \:\ \ /\/:/ / \:\~\:\ \/__/ \/__|:|/:/ / /:/ \/__/ \:\~\:\ \/__/ \:\ \:\ \/__/ \:\ \ \:\ \ \::/__/ \:\ \:\__\ |:/:/ / /:/ / \:\ \:\__\ \:\ \:\__\ \:\ \ \:\ \ \:\__\ \:\ \/__/ |::/ / \/__/ \:\ \/__/ \:\/:/ / \:\__\ \:\__\ \/__/ \:\__\ /:/ / \:\__\ \::/ / \/__/ \/__/ \/__/ \/__/ \/__/ \/__/ **************************************************************************************************************** */ var cliente_seleccionado = null; var seleccion_de_cliente = function(a,c){ cliente_seleccionado = c[0]; console.log("Cliente seleccionado", cliente_seleccionado); Ext.get("buscar_cliente_01").enableDisplayMode('block').hide(); var pphtml = "<h3 style='margin:0px'>Venta para <a target=\"_blank\" href='clientes.ver.php?cid="+cliente_seleccionado.get("id_usuario")+"'>" + cliente_seleccionado.get("nombre") + "</a></h3>"; if( cliente_seleccionado.get("rfc") !== null ) pphtml += "<p>" + cliente_seleccionado.get("rfc") + "</p>"; pphtml += "<br><div class='POS Boton' onClick='buscar_cliente()' >Buscar otro cliente</div>"; Ext.get("buscar_cliente_02").update(pphtml).show(); actualizar_carrito(); }; /* ******************************************************** ___ ___ ___ ___ ___ /\__\ /\ \ /\__\ /\ \ /\ \ /:/ / /::\ \ /::| | \:\ \ /::\ \ /:/ / /:/\:\ \ /:|:| | \:\ \ /:/\:\ \ /:/__/ ___ /::\~\:\ \ /:/|:| |__ /::\ \ /::\~\:\ \ |:| | /\__\ /:/\:\ \:\__\ /:/ |:| /\__\ /:/\:\__\ /:/\:\ \:\__\ |:| |/:/ / \:\~\:\ \/__/ \/__|:|/:/ / /:/ \/__/ \/__\:\/:/ / |:|__/:/ / \:\ \:\__\ |:/:/ / /:/ / \::/ / \::::/__/ \:\ \/__/ |::/ / \/__/ /:/ / ~~~~ \:\__\ /:/ / /:/ / \/__/ \/__/ \/__/ * ******************************************************** */ var validar_venta_a_credito = function (clienteStore, carrito){ if(clienteStore === null){ //no hay cliente seleccionado Ext.get("SeleccionDeCliente").highlight(); return false; } var vac = clienteStore.get("limite_credito"); if((vac === null)||( parseFloat(vac) === 0) ){ //no tiene ventas a credito Ext.MessageBox.alert("Nueva venta", "El cliente "+clienteStore.get("nombre") + " no tiene ventas a credito."); return false; } return true; } // // Valor default de venta // var tipo_de_venta = "contado"; var seleccion_tipo_de_venta = function(tipo){ switch(tipo){ case "credito" : console.log("seleccion_tipo_de_venta(credito)"); validar_venta_a_credito(cliente_seleccionado, carrito_store ); tipo_de_venta = "credito"; break; case "contado" : console.log("seleccion_tipo_de_venta(contado)"); tipo_de_venta = "contado"; break; default: throw new Exception( "seleccion_tipo_de_venta(): tipo invalido" ); } } var buscar_cliente = function(){ cliente_seleccionado = null; Ext.get("buscar_cliente_02").enableDisplayMode('block').hide(); Ext.get("buscar_cliente_01").show(); actualizar_carrito(); } var seleccionar_producto = function( a, p ){ console.group("SELECCION DE PRODUCTO"); console.log( "Seleccionando producto", p ); //ponerle cantidad inicial de 1 console.log("cantidad inicial de 1"); p[0].set("cantidad", 1); //agregar produco al store carrito_store.add( p[0] ); console.groupEnd(); actualizar_carrito(); } var tipo_de_pago_seleccionado = "efectivo"; var seleccion_de_tarifa = function(id_tarifa){ console.log("Tarifa seleccionada:" + id_tarifa); actualizar_carrito(); } var carrito_store; var retriveData = function(){ // // crear un objeto con los productos // var detalle_de_venta = []; // // // var carrito_store_count = carrito_store.count(); var subtotal = 0; var tarifaActual = 1; tarifaActual = Ext.get("tarifa_seleccionada").getValue(); console.log("la tarifa actual es :" + tarifaActual); for (var i=0; i < carrito_store_count; i++) { var p = carrito_store.getAt(i); var tarifasProducto = p.get("tarifas"); var precio_con_tarifa = -1; for (var j=0; j < tarifasProducto.length; j++) { if(tarifasProducto[j].id_tarifa == tarifaActual){ //console.log("ya encontre el precio de esta tarifa"); precio_con_tarifa = parseFloat( tarifasProducto[j].precio ); subtotal += precio_con_tarifa * parseFloat( p.get("cantidad") ) ; break; } } detalle_de_venta.push({ id_producto : p.get("id_producto"), cantidad : p.get("cantidad"), precio : precio_con_tarifa, descuento : 0, impuesto : 0, retencion : 0, id_unidad : p.get("id_unidad") }); }; var impuesto = 0, descuento = 0; //descuento esta en 0-100 descuento = Ext.get("descuento_seleccionado_val").getValue(); //dAplicado es el descuento sin aplicar, lol var dAplicado = (descuento/100) * subtotal; subtotal = subtotal - dAplicado; <?php //listar impuestos $i = ImpuestosController::Lista(); $iLista = $i["resultados"]; $impuestos_to = 0; //carrito_impuesto foreach ($iLista as $imp) { $impuestos_to += $imp->getImporte(); } echo "impuesto = subtotal * " . $impuestos_to . ";"; ?> ventaObj = { retencion : 0, descuento : dAplicado, impuesto : impuesto, subtotal : subtotal, total : subtotal + impuesto, tipo_venta : tipo_de_venta, id_sucursal : null, detalle_venta : Ext.JSON.encode( detalle_de_venta ) }; if(cliente_seleccionado == null){ ventaObj.id_comprador_venta = null; }else{ ventaObj.id_comprador_venta = cliente_seleccionado.get("id_usuario"); } if(Ext.get("sucursal_seleccionada") !== undefined){ ventaObj.id_sucursal = Ext.get("sucursal_seleccionada").getValue(); }else if( sucursal_seleccionada !== undefined || sucursal_seleccionada != null ){ ventaObj.id_sucursal = sucursal_seleccionada; } return ventaObj; } var doCotizar = function(){ var ventaObj = retriveData(); ventaObj.es_cotizacion = true; // // Enviar al API // POS.API.POST( "api/ventas/nueva/", ventaObj, { callback : function(r){ if(r.status === "ok"){ window.location = "ventas.detalle.php?vid=" + r.id_venta + "&last_action=ok"; }else{ console.error(r); Ext.MessageBox.alert("Nueva venta", "Algo salio mal."); } } }); } var doVenta = function (){ var ventaObj = retriveData(); ventaObj.es_cotizacion = 0; if( ventaObj.id_sucursal == null ){ window.scrollTo(0, Ext.get("SeleccionDeSucursal").getY() - 20); Ext.get("SeleccionDeSucursal").highlight(); return; } // // Enviar al API // POS.API.POST( "api/ventas/nueva/", ventaObj, { callback : function(r){ if(r.status === "ok"){ window.location = "ventas.detalle.php?vid=" + r.id_venta + "&last_action=ok"; }else{ console.error(r); Ext.MessageBox.alert("Nueva venta", "Algo salio mal."); } } }); } var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1, listeners: { edit: function(){ // refresh summaries actualizar_carrito(); } } }); var sucursal_seleccionada = null; var seleccionar_sucursal = function( sucursalStore ){ //sucursalStore console.log(sucursalStore.get("id_sucursal") + " seleccionada..."); sucursal_seleccionada = sucursalStore.get("id_sucursal"); actualizar_carrito(); }; Ext.onReady(function(){ <?php $this->printOnReadyJs(); ?> /** ***************************************************************** * CARRITO * * ***************************************************************** */ // create the Grid grid = Ext.create('Ext.grid.Panel', { store: carrito_store, plugins: [cellEditing], stateful: false, bodyCls: 'foo', stateId: 'stateGrid2', columns: [ { text : 'Codigo producto', width : 95, sortable : false, dataIndex: 'codigo_producto' }, { text : 'Nombre producto', flex : 1, sortable : true, dataIndex: 'nombre_producto' }, { text : 'Cantidad', dataIndex: 'cantidad', sortable : false, field: { xtype: 'numberfield', decimalPrecision : 4 }, renderer: function (cantidad, a, storeObj){ var um = unidadMedida.getById(parseInt( storeObj.get("id_unidad") ) ); if(um == null){ alert("Hay un problema con las unidades del producto recien seleccionado. Porfavor verifique que tenga una unidad especificada."); return cantidad + " ERROR EN UNIDADES" ; } return cantidad + " " + um.get("descripcion"); } }, /* { text : 'Unidad', width : 75, dataIndex: 'id_unidad', field : { xtype : "combobox", typeAhead: false, invalidText : "Invalido", triggerAction: 'all', selectOnTab: true, store: unidadMedida, lazyRender: true, listClass: 'x-combo-list-small', displayField: "abreviacion", listConfig: { loadingText: 'Buscando...', // Custom rendering template for each item getInnerTpl: function(a,b,c) { return "<p style='margin:0px'>{abreviacion}</p>"; } }, }//field }, */ { text : 'Precio', sortable : true, dataIndex: 'tarifas', renderer : function(tarifasArray){ /* ***** **** ***** tarifasArray tiene las tarifas para este producto solo hay que ver que cliente esta seleccionado para mostrar la adecuada ***** **** ***** */ var tf = Ext.get("tarifa_seleccionada").getValue(); for (var i=0; i < tarifasArray.length; i++) { if(tarifasArray[i].id_tarifa == tf){ return Ext.util.Format.usMoney( tarifasArray[i].precio ); } } return "X"; } }, { text : 'Importe', width : 75, sortable : true, renderer : function(a,b,producto){ var tf = Ext.get("tarifa_seleccionada").getValue(); var tarifasArray = producto.get("tarifas"); for (var i=0; i < tarifasArray.length; i++) { if(tarifasArray[i].id_tarifa == tf){ return Ext.util.Format.usMoney( parseFloat(tarifasArray[i].precio ) * parseFloat(producto.get("cantidad")) ); } }; } } ], height: 350, width: "100%", renderTo: 'carrito_de_compras_grid', viewConfig: { stripeRows: true } }); /** ***************************************************************** * CARRITO * * ***************************************************************** */ }); /* Ext.onReady */ </script> <h2>Nueva venta</h2> <table border="0" style="width: 100%" class=""> <tr id="SeleccionDeCliente"> <td colspan="4"> <div id="buscar_cliente_01"> <p style="margin-bottom: 0px;">Buscar cliente</p> <div style="margin-bottom: 15px;" id="ShoppingCartComponent_002"><!-- clientes --></div> </div> <div id="buscar_cliente_02" style="display:none; margin-bottom: 0px"></div> </td> </tr> <tr> <td id="SeleccionDeSucursal"> Sucursal: <div > <?php $sucursales = SucursalDAO::getAll(); if (sizeof($sucursales) == 0) { ?> <div style="color:gray; font-size:9px">[No hay sucursales]</div><?php } else { if (sizeof($sucursales) > 10) { $selector_de_suc = new SucursalSelectorComponent(); $selector_de_suc->addJsCallback("seleccionar_sucursal"); $selector_de_suc->renderCmp(); } else { ?> <select id="sucursal_seleccionada" onChange="seleccionar_sucursal(this.value)" ><?php for ($i = 0; $i < sizeof($sucursales); $i++) { echo "<option value=\"" . $sucursales[$i]->getIdSucursal() . "\" >" . $sucursales[$i]->getDescripcion() . "</option>"; } ?> </select><?php } } ?> </div> </td> <td id="SeleccionDeTipoDeVenta"> Tipo de venta: <div > <select onChange="seleccion_tipo_de_venta(this.value)"> <option value="contado" selected>Contado</option> <option value="credito">Credito</option> </select> </div> </td> <td id="SeleccionDeImpuestos"> Tipo de tarifa: <div > <select id="tarifa_seleccionada" onChange="seleccion_de_tarifa(this.value)" > <?php $tarifas = TarifaDAO::obtenerTarifasActuales("venta"); for ($i = 0; $i < sizeof($tarifas); $i++) { echo "<option value=\"" . $tarifas[$i]["id_tarifa"] . "\" >" . $tarifas[$i]["nombre"] . "</option>"; } ?> </select> </div> </td> <td id="SeleccionDeTipoDePago"> Tipo de pago: <div > <select name="" onChange="tipo_de_pago_seleccionado = this.value"> <option value="efectivo">efectivo</option> <option value="cheque">cheque</option> </select> </div> </td> </tr> <tr> <td id="SeleccionDeDescuento"> Descuento: <input type="text" id="descuento_seleccionado_val" onchange="actualizar_carrito()" value="0" > <select id="descuento_seleccionado_tipo" onChange="actualizar_carrito()"> <option value="porciento">%</option> <!-- <option value="MXN">MXN</option> --> </select> </td> </tr> </table> <div id="CartComponent_002"><!-- buscar productos --></div> <div id="carrito_de_compras" style="margin: 5px auto;"> <div id="carrito_de_compras_grid"></div> </div> <div style="border:1px solid #99BBE8; ;box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; -webkit-box-sizing: border-box; margin-bottom: 20px"> <table style="margin-bottom: 0px; width: 200px; margin-right: 0px; margin-left: auto;"> <tr> <td>Subtotal</td> <td id="carrito_subtotal"></td> </tr> <tr> <td>Descuento</td> <td id="carrito_descuento"></td> </tr> <tr> <td>Impuesto</td> <td id="carrito_impuesto"></td> </tr> <tr> <td><strong>Total</strong></td> <td id="carrito_total"></td> </tr> </table> </div> <div class="POS Boton" onClick="cancelarVenta()">Cancelar</div> <div class="POS Boton" onClick="doCotizar()">Solo cotizar</div> <div class="POS Boton OK" onClick="doVenta()">Vender</div> <?php }
/** * *Registra una nueva compra fuera de caja, puede usarse para que el administrador haga directamente una compra. El usuario y al sucursal seran tomados de la sesion. La fecha sera tomada del servidor. La empresa sera tomada del almacen del cual fueron tomados los productos. * * @param descuento float Monto descontado por descuentos * @param subtotal float Total de la compra antes de impuestos y descuentos. * @param detalle json Objeto que contendr el arreglo de id productos, cantidad, precio, descuento, id de unidad y procesado que involucran esta compra. * @param impuesto float Monto agregado por impuestos * @param tipo_compra string Si la compra es a credito o de contado * @param retencion float Monto agregado por retenciones * @param id_usuario_compra int Id usuario al que se le compra, si es a una sucursal, se pone el id en negativo * @param id_empresa int Id de la empresa a nombre de la cual se hace la compra * @param total float Total de la compra * @param cheques json Si el tipo de pago es con cheque, se almacena el nombre del banco, el monto y los ultimos 4 numeros del o de los cheques * @param saldo float Cantidad pagada de la * @param tipo_de_pago string Si el pago sera en efectivo, con cheque o tarjeta * @return id_compra int Id autogenerado por la inserci�n de la compra **/ public static function Nueva($descuento, $detalle, $id_empresa, $id_usuario_compra, $impuesto, $retencion, $subtotal, $tipo_compra, $total, $cheques = null, $id_sucursal = null, $saldo = 0, $tipo_de_pago = null) { Logger::log(" ===== Creando nueva compra... ===== "); //validemos al comprador $proveedor = UsuarioDAO::getByPK($id_usuario_compra); if (is_null($proveedor)) { Logger::error("el provedor {$id_usuario_compra} no exite"); throw new InvalidDataException("El proveedor no existe"); } if ($proveedor->getActivo() == false) { throw new BusinessLogicException("No se puede comprar de un proveedor no activo."); } //validemos la empresa $empresa = EmpresaDAO::getByPK($id_empresa); if (is_null($empresa)) { Logger::error("La empresa {$id_empresa} no existe"); throw new InvalidDataException("La empresa que compra no existe."); } if ($empresa->getActivo() == false) { throw new BusinessLogicException("Una empresa inactiva no puede hacer compras."); } //validemos los valores conocidos //( 0 >= descuento > 100, subtotal > 0, total >= subtotal, etc etc) //validemos sucursal $sucursal = null; if (!is_null($id_sucursal) && strlen($id_sucursal) > 0) { $sucursal = SucursalDAO::getByPK($id_sucursal); if (is_null($sucursal)) { Logger::error("La sucursal {$id_sucursal} no existe"); //throw new InvalidDataException("La sucural que se envio no existe."); } } //validemos detalles de compra //debe traer // -id_producto // -cantidad // -precio // -lote if (!is_array($detalle)) { throw InvalidDataException("El detalle no es un arreglo"); } for ($detalleIterator = 0; $detalleIterator < sizeof($detalle); $detalleIterator++) { //por cada producto // -debe existir // -si se lo compro a un proveedor no hay pedo // si se lo compro a un cliente, debe de tener comprar_caja = 1 // -debe tener cantidad mayor a 0 // -que exista el lote a donde va a ir $p = $detalle[$detalleIterator]; if (!isset($p->precio)) { throw new InvalidArgumentException("No se envio el precio"); } if (!isset($p->id_producto)) { throw new InvalidArgumentException("No se envio el id_producto"); } if (!isset($p->cantidad)) { throw new InvalidArgumentException("No se envio la cantidad"); } if (!isset($p->lote)) { throw new InvalidArgumentException("No se envio el lote"); } $producto = ProductoDAO::getByPK($p->id_producto); if (is_null($producto)) { throw new InvalidArgumentException("El producto a comprar no existe"); } if ($p->cantidad <= 0) { throw new InvalidArgumentException("No puedes comprar 0 unidades"); } } $s = SesionController::getCurrentUser(); //terminaron las validaciones $compra = new Compra(); $compra->setIdVendedorCompra($id_usuario_compra); $compra->setTipoDeCompra($tipo_compra); $compra->setFecha(time()); $compra->setSubtotal($subtotal); $compra->setImpuesto($impuesto); $compra->setDescuento($descuento); $compra->setTotal($subtotal + $impuesto); $compra->setIdUsuario($s->getIdUsuario()); $compra->setIdEmpresa($id_empresa); $compra->setSaldo(0); $compra->setCancelada(false); $compra->setTipoDePago($tipo_de_pago); $compra->setRetencion(0); try { DAO::transBegin(); CompraDAO::save($compra); } catch (Exception $e) { DAO::transRollback(); throw InvalidDatabaseOperationException($e); } for ($detalleIterator = 0; $detalleIterator < sizeof($detalle); $detalleIterator++) { //por cada producto // --- procesos --- // -insertar en productoempresa // -insertar en loteproducto // -insertar en entradalote // -si el tipo de precio de venta es costo, actualizar // -insertar compra producto $p = $detalle[$detalleIterator]; try { ProductoEmpresaDAO::save(new ProductoEmpresa(array("id_empresa" => $id_empresa, "id_producto" => $p->id_producto))); if (is_null($p->lote)) { throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto); } if (strlen($p->lote) == 0) { throw new InvalidDataException("No selecciono a que lote ira el producto " . $p->id_producto); } //busquemos el id del lote $l = LoteDAO::search(new Lote(array("folio" => $p->lote))); $l = $l[0]; //busquemos la unidad que nos mandaron $uAbreviacion = $p->id_unidad; $uResults = UnidadMedidaDAO::search(new UnidadMedida(array("abreviacion" => $uAbreviacion, "activa" => 1))); if (sizeof($uResults) != 1) { throw new InvalidDataException("La unidad de medida `" . $p->id_unidad . "` no existe, o no esta activa."); } else { $p->id_unidad = $uResults[0]->getIdUnidadMedida(); } //busequemos si este producto ya existe en este lote $lp = LoteProductoDAO::getByPK($l->getIdLote(), $p->id_producto); if (is_null($lp)) { //no existe, insertar $loteProducto = new LoteProducto(array("id_lote" => $l->getIdLote(), "id_producto" => $p->id_producto, "cantidad" => $p->cantidad, "id_unidad" => $p->id_unidad)); LoteProductoDAO::save($loteProducto); } else { //ya existe, sumar //revisemos si es de la misma unidad if ($lp->getIdUnidad() == $p->id_unidad) { //es igual, solo hay que sumar $lp->setCantidad($lp->getCantidad() + $p->cantidad); } else { //no es igual, hay que convertir try { $r = UnidadMedidaDAO::convertir($p->id_unidad, $lp->getIdUnidad(), $p->cantidad); } catch (BusinessLogicException $ide) { //no se pudo convertir porque son de //diferentes categorias throw $ide; //mostrar una excpetion mas fresona } $lp->setCantidad($lp->getCantidad() + $r); } //$lp->setCantidad( $lp->getCantidad() + $p->cantidad ); LoteProductoDAO::save($lp); } $loteEntrada = new LoteEntrada(array("id_lote" => $l->getIdLote(), "id_usuario" => $s->getIdUsuario(), "fecha_registro" => time(), "motivo" => "Compra a Proveedor")); LoteEntradaDAO::save($loteEntrada); LoteEntradaProductoDAO::save(new LoteEntradaProducto(array("id_lote_entrada" => $loteEntrada->getIdLoteEntrada(), "id_producto" => $p->id_producto, "id_unidad" => $p->id_unidad, "cantidad" => $p->cantidad))); $compraProducto = new CompraProducto(array("id_compra" => $compra->getIdCompra(), "id_producto" => $p->id_producto, "cantidad" => $p->cantidad, "precio" => $p->precio, "descuento" => 0, "impuesto" => 0, "id_unidad" => $p->id_unidad, "retencion" => 0)); CompraProductoDAO::save($compraProducto); } catch (InvalidDataException $e) { Logger::error($e); DAO::transRollback(); throw $e; } catch (exception $e) { Logger::error($e); DAO::transRollback(); throw new InvalidDatabaseOperationException($e); } } //for try { DAO::transEnd(); } catch (Exception $e) { throw InvalidDatabaseOperationException($e); } Logger::log("===== COMPRA " . $compra->getIdCompra() . " EXITOSA ===== "); return array("id_compra" => $compra->getIdCompra()); }
require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); // // Titulo de la pagina // $page->addComponent(new TitleComponent("Editar gerencia", 2)); // // Forma de usuario // $form = new DAOFormComponent(new Sucursal()); $form->hideField(array("id_direccion", "fecha_apertura", "fecha_baja", "activa", "rfc", "razon_social", "descripcion", "saldo_a_favor", "margen_utilidad", "descuento")); $form->addApiCall("api/sucursal/gerencia/editar/", "GET"); // $form->addField("id_producto", "Productos", "text","","productos"); // $form->createListBoxJoin("id_producto", "nombre_producto", ProductoDAO::search( new Producto( array( "activo" => 1 ) ) )); // $form->createComboBoxJoin("id_sucursal", "razon_social", SucursalDAO::search(new Sucursal(array("activa" => 1)))); $form->createComboBoxJoinDistintName("id_gerente", "id_usuario", "nombre", UsuarioDAO::search(new Usuario(array("id_rol" => 2)))); // $form->createComboBoxJoin( "id_rol", "nombre", RolDAO::getAll(), $este_usuario->getIdRol() ); // // $form->createComboBoxJoin( "id_moneda", "nombre", MonedaDAO::search( new Moneda( array( "activa" => 1 ) ) ),$este_usuario->getIdMoneda() ); // // $form->createComboBoxJoin( "id_clasificacion_cliente", "nombre", ClasificacionClienteDAO::getAll(), $este_usuario->getIdClasificacionCliente() ); // // $form->createComboBoxJoin( "id_clasificacion_proveedor", "nombre", ClasificacionProveedorDAO::search( new ClasificacionProveedor( array( "activa" => 1 ) ) ), $este_usuario->getIdClasificacionProveedor() ); //$form->createComboBoxJoin("id_tipo_almacen", "descripcion", array_diff(TipoAlmacenDAO::getAll(), TipoAlmacenDAO::search( new TipoAlmacen( array( "id_tipo_almacen" => 2 ) ) ) ), $este_almacen->getIdTipoAlmacen() ); // $form->renameField( array( // "id_ciudad" => "municipio" // )); $form->makeObligatory(array("id_sucursal", "id_gerente")); $page->addComponent($form); $page->render();
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()); }
<?php define("BYPASS_INSTANCE_CHECK", false); require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); //titulos $page->addComponent(new TitleComponent("Nueva caja")); //forma de nueva caja $form = new DAOFormComponent(array(new Caja())); $form->hideField(array("id_caja", "abierta", "saldo", "activa", "id_cuenta_contable")); $form->addApiCall("api/sucursal/caja/nueva/"); $form->onApiCallSuccessRedirect("sucursales.lista.caja.php"); $form->makeObligatory(array("token", "descripcion", "id_sucursal")); $form->createComboBoxJoin("control_billetes", "control_billetes", array(array("id" => 1, "caption" => "Llevar control"), array("id" => 0, "caption" => "No llevar control"))); $form->createComboBoxJoin("id_sucursal", "descripcion", SucursalDAO::search(new Sucursal(array("activa" => 1)))); $page->addComponent($form); //render the page $page->render();
/** * *Creara un nuevo almacen en una sucursal, este almacen contendra lotes. * * @param id_empresa int Id de la empresa a la que pertenecen los productos de este almacen * @param id_sucursal int El id de la sucursal a la que pertenecera este almacen. * @param id_tipo_almacen int Id del tipo de almacen * @param nombre string nombre del almacen * @param descripcion string Descripcion extesa del almacen * @return id_almacen int el id recien generado **/ static function Nuevo($id_empresa, $id_sucursal, $id_tipo_almacen, $nombre, $descripcion = null) { //verificamos que exista la empresa if (!is_null($id_empresa) && !($empresa = EmpresaDAO::getByPK($id_empresa))) { throw new Exception("No se tiene registro de la empresa {$id_empresa}"); } //verificamos que exista la sucursal if (!is_null($id_sucursal) && !($sucursal = SucursalDAO::getByPK($id_sucursal))) { throw new Exception("No se tiene registro de la sucursal {$id_sucursal}"); } //verificamos que exista el tipo de almacen if (!is_null($id_tipo_almacen) && !($almacen = TipoAlmacenDAO::getByPK($id_tipo_almacen))) { throw new Exception("No se tiene registro del tipo de almacen {$id_tipo_almacen}"); } //verificamos que se haya especificado el nombre if (!ValidacionesController::validarLongitudDeCadena(trim($nombre), 2, 100)) { throw new Exception("El nombre debe ser una cadena entre 2 y 100 caracteres, se encontro \"" . trim($nombre) . "\" "); } //Se valida si hay un almacen con ese mimso nombre en esta sucursal $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal))); foreach ($almacenes as $almacen) { if ($almacen->getNombre() == trim($nombre) && $almacen->getActivo()) { Logger::log("El nombre (" . $nombre . ") ya esta siendo usado por el almacen: " . $almacen->getIdAlmacen()); throw new Exception("El nombre ya esta en uso"); } } //Si se recibe un tipo de almacen de consignacion, se manda una excepcion, pues no se puede crear un almacen //de consignacion con este metodo. if ($id_tipo_almacen == 2) { Logger::error("No se puede crear un almacen de consignacion con este metodo"); throw new Exception("No se puede crear un almacen de consignacion con este metodo"); } //Solo puede haber un almacen por tipo por cada empresa en una sucursal. $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal, "id_empresa" => $id_empresa, "id_tipo_almacen" => $id_tipo_almacen))); if (!empty($almacenes)) { Logger::error("Ya existe un almacen (" . $almacenes[0]->getIdAlmacen() . ") de este tipo (" . $id_tipo_almacen . ") en esta sucursal (" . $id_sucursal . ") para esta empresa (" . $id_empresa . ")"); throw new Exception("Ya existe un almacen de este tipo en esta sucursal para esta empresa"); } //Se inicializa el registro a guardar con los datos obtenidos. $almacen = new Almacen(); $almacen->setNombre(trim($nombre)); $almacen->setDescripcion($descripcion); $almacen->setIdSucursal($id_sucursal); $almacen->setIdEmpresa($id_empresa); $almacen->setIdTipoAlmacen($id_tipo_almacen); $almacen->setActivo(1); DAO::transBegin(); try { AlmacenDAO::save($almacen); } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo crear el nuevo almacen"); throw new Exception("No se pudo crear el nuevo almacen"); } DAO::transEnd(); Logger::log("Almacen " . $almacen->getIdAlmacen() . " creado exitosamente"); return array("id_almacen" => (int) $almacen->getIdAlmacen()); }