require_once "../../../server/bootstrap.php"; $page = new GerenciaComponentPage(); // // Parametros necesarios // $page->requireParam("tid", "GET", "Este traspaso no existe."); $este_traspaso = TraspasoDAO::getByPK($_GET["tid"]); // // Titulo de la pagina // $page->addComponent(new TitleComponent("Editar traspaso " . $este_traspaso->getIdTraspaso() . "\n . De almacen: " . AlmacenDAO::getByPK($este_traspaso->getIdAlmacenEnvia())->getNombre() . "\n al almacen: " . AlmacenDAO::getByPK($este_traspaso->getIdAlmacenRecibe())->getNombre(), 2)); // // Forma de usuario // $form = new DAOFormComponent($este_traspaso); $form->hideField(array("id_traspaso", "id_usuario_programa", "id_usuario_envia", "fecha_envio", "id_usuario_recibe", "fecha_recibo", "estado", "cancelado", "completo", "id_almacen_envia", "id_almacen_recibe")); $form->addApiCall("api/sucursal/almacen/traspaso/editar/", "GET"); $form->addField("id_producto", "Productos", "text", "", "productos"); $form->createListBoxJoin("id_producto", "nombre_producto", ProductoDAO::search(new Producto(array("activo" => 1)))); $form->renameField(array("id_producto" => "productos")); //$form->createComboBoxJoin( "id_ciudad", "nombre", CiudadDAO::getAll(), $esta_direccion->getIdCiudad() ); // $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() ); $page->addComponent($form); $page->render();
/** * *Crear un nuevo producto, NOTA: Se crea un producto tipo = 1 que es para productos * * @param activo bool Si queremos que este activo o no este producto despues de crearlo. * @param codigo_producto string El codigo de control de la empresa para este producto, no se puede repetir * @param id_empresas json Objeto que contendra el arreglo de ids de las empresas a la que pertenece este producto * @param nombre_producto string Nombre del producto * @param metodo_costeo string Mtodo de costeo del producto: 1 = Costo Promedio en Base a Entradas.2 = Costo Promedio en Base a Entradas Almacn.3 = ltimo costo.4 = UEPS.5 = PEPS.6 = Costo especfico.7 = Costo Estndar * @param costo_estandar float Valor del costo estndar del producto. * @param compra_en_mostrador bool Verdadero si este producto se puede comprar en mostrador, para aquello de compra-venta. Para poder hacer esto, el sistema debe poder hacer compras en mostrador * @param garant�a int Si este producto cuenta con un nmero de meses de garanta que no aplica a los productos de su categora * @param costo_extra_almacen float Si este producto produce un costo extra por tenerlo en almacen * @param margen_de_utilidad float Un porcentage de 0 a 100 si queremos que este producto marque utilidad en especifico * @param control_de_existencia int 00000001 = Unidades. 00000010 = Caractersticas. 00000100 = Series. 00001000 = Pedimentos. 00010000 = Lote * @param peso_producto float el peso de este producto en KG * @param descripcion_producto string Descripcion larga del producto * @param impuestos json array de ids de impuestos que tiene este producto * @param clasificaciones json Uno o varios id_clasificacion de este producto, esta clasificacion esta dada por el usuarioArray * @param id_unidad_convertible int Si este producto se relacionara con una unidad convertible ( kilos, litros, libras, etc.) * @param codigo_de_barras string El Codigo de barras para este producto * @param id_unidad_no_convertible int Si este producto se relacionara con una unidad no convertible ( lotes, cajas, costales, etc.) * @param foto_del_producto string url a una foto de este producto * @param descuento float Descuento que se aplicara a este producot * @return id_producto int Id generado por la inserci�n del nuevo producto **/ public static function Nuevo($activo, $codigo_producto, $compra_en_mostrador, $id_unidad_compra, $metodo_costeo, $nombre_producto, $visible_en_vc, $codigo_de_barras = null, $control_de_existencia = null, $costo_estandar = null, $descripcion_producto = null, $foto_del_producto = null, $garantia = null, $id_categoria = null, $id_empresas = null, $id_unidad = null, $impuestos = null, $precio_de_venta = null) { Logger::log("======= Creando nuevo producto `{$codigo_producto}` ==== ;"); //valida los parametros recibidos /*$validar = self::validarParametrosProducto(null, $compra_en_mostrador, $metodo_costeo, $activo, $codigo_producto, $nombre_producto, $garantia, $costo_estandar, $id_unidad_compra, $control_de_existencia, $descripcion_producto, $foto_del_producto, $costo_extra_almacen = null, $codigo_de_barras, $peso_producto = null, $id_unidad, $precio_de_venta); if (is_string($validar)) { Logger::error($validar); throw new Exception($validar); } //is_string($validar)*/ //buscar otro producto con el mismo codigo de producto $search = ProductoDAO::search(new Producto(array("codigo_producto" => $codigo_producto))); if (sizeof($search) > 0) { throw new BusinessLogicException("Ya hay un producto con ese codigo de producto"); } //Se verifica que si se recibio precio como metodo de costeo, se reciba un precio, //o si se recibe margen, que se reciba un margen de utilidad. if ($metodo_costeo == "precio" && is_null($precio_de_venta)) { Logger::error("Se intenta registrar un producto con metodo de costeo precio sin especificar un precio"); throw new InvalidDataException("Se intenta registrar un producto con metodo de costeo precio sin especificar un precio", 901); } else { if ($metodo_costeo == "costo" && is_null($costo_estandar)) { Logger::error("Se intenta registrar un producto con metodo de costeo costo sin especificar un costo"); throw new Exception("Se intenta registrar un producto con metodo de costeo costo sin especificar un costo", 901); } } //$metodo_costeo == "costo" && is_null($costo_estandar) $costo_estandar = $metodo_costeo == "costo" ? $costo_estandar : null; //sólo en caso de que se haya seleccionado metodo_costeo == 'costo' tomar en cuenta este valor ver API $producto = new Producto(array("compra_en_mostrador" => $compra_en_mostrador, "metodo_costeo" => $metodo_costeo, "activo" => $activo, "codigo_producto" => trim($codigo_producto), "nombre_producto" => trim($nombre_producto), "visible_en_vc" => $visible_en_vc, "garantia" => $garantia, "costo_estandar" => $costo_estandar, "control_de_existencia" => $control_de_existencia, "descripcion" => $descripcion_producto, "foto_del_producto" => $foto_del_producto, "codigo_de_barras" => trim($codigo_de_barras), "id_unidad" => $id_unidad, "precio" => $precio_de_venta, "id_unidad_compra" => $id_unidad_compra)); DAO::transBegin(); try { //Se guarda el producto creado y se asignan las empresas, los impuestos y las clasificaciones recibidas ProductoDAO::save($producto); if (!is_null($id_empresas)) { if (!is_array($id_empresas)) { $id_empresas = object_to_array($id_empresas); } //!is_array($id_empresas) if (!is_array($id_empresas)) { throw new Exception("Las empresas fueron enviadas incorrectamente", 901); } //!is_array($id_empresas) $producto_empresa = new ProductoEmpresa(array("id_producto" => $producto->getIdProducto())); foreach ($id_empresas as $id_empresa) { $validar = self::validarParametrosProductoEmpresa($id_empresa); if (is_string($validar)) { throw new BusinessLogicException($validar, 901); } $producto_empresa->setIdEmpresa($id_empresa); Logger::log("vinculando producto con empresa " . $id_empresa); ProductoEmpresaDAO::save($producto_empresa); } //$id_empresas as $id_empresa } //!is_null($id_empresas) if (!is_null($impuestos)) { $impuestos = object_to_array($impuestos); if (!is_array($impuestos)) { throw new BusinessLogicException("Los impuestos fueron recibidos incorrectamente", 901); } //!is_array($impuestos) $impuesto_producto = new ImpuestoProducto(array("id_producto" => $producto->getIdProducto())); foreach ($impuestos as $impuesto) { if (is_null(ImpuestoDAO::getByPK($impuesto))) { throw new BusinessLogicException("El impuesto con id " . $impuesto . " no existe", 901); } $impuesto_producto->setIdImpuesto($impuesto); ImpuestoProductoDAO::save($impuesto_producto); } //$impuestos as $impuesto } //!is_null($impuestos) /* Fin if de impuestos */ /* if (!is_null($clasificaciones)) { $clasificaciones = object_to_array($clasificaciones); if (!is_array($clasificaciones)) { throw new Exception("Las clasificaciones del producto fueron recibidas incorrectamente", 901); } //!is_array($clasificaciones) $producto_clasificacion = new ProductoClasificacion(array( "id_producto" => $producto->getIdProducto() )); foreach ($clasificaciones as $clasificacion) { $c = ClasificacionProductoDAO::getByPK($clasificacion); if (is_null($c)) throw new Exception("La clasificacion de producto con id " . $clasificacion . " no existe", 901); if (!$c->getActiva()) throw new Exception("La clasificaicon de producto con id " . $clasificacion . " no esta activa", 901); $producto_clasificacion->setIdClasificacionProducto($clasificacion); ProductoClasificacionDAO::save($producto_clasificacion); } //$clasificaciones as $clasificacion } //!is_null($clasificaciones) */ /* Fin if de clasificaciones */ } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo guardar el nuevo producto: " . $e); if ($e->getCode() == 901) { throw new BusinessLogicException("No se pudo guardar el nuevo producto: " . $e->getMessage(), 901); } throw new BusinessLogicException("No se pudo guardar el nuevo producto " . $e->getMessage(), 901); } DAO::transEnd(); Logger::log("Producto creado exitosamente, id=" . $producto->getIdProducto()); return array("id_producto" => (int) $producto->getIdProducto()); }