public function carrito2albaran(&$albaran, $des_stock, $lineas, &$error) { $mis_articulos = new articulos(); $mis_clientes = new clientes(); $retorno = true; if ($albaran['codcliente'] != '') { /// obtenemos los datos del cliente $cliente = $mis_clientes->get($albaran['codcliente']); $direccion = $mis_clientes->get_direccion($albaran['codcliente']); if ($direccion['id'] == '') { $retorno = false; $error = "El cliente no tiene una dirección conocida"; } } else { $retorno = false; $error = "Debes especificar un cliente"; } $nfecha = explode('-', $albaran['fecha']); if (!is_numeric($nfecha[0]) or !is_numeric($nfecha[1]) or !is_numeric($nfecha[2])) { $retorno = false; $error = "Debes escribir una fecha válida"; } if ($albaran['codalmacen'] == '') { $retorno = false; $error = "No hay ningún almacén predeterminado"; } if (empty($lineas)) { $retorno = false; $error = "No hay artículos en tu carrito"; } if ($albaran['codagente'] == '') { $retorno = false; $error = "Tu usuario no está vinculado a ningún agente"; } if ($retorno and $albaran['codejercicio'] != '' and $albaran['codserie'] != '') { /// obtenemos el numero de albaran $consulta = "SELECT s.valorout,s.id FROM secuencias s,secuenciasejercicios e\n WHERE s.nombre='nalbarancli' AND s.id=e.id AND e.codserie='{$albaran['codserie']}'\n AND e.codejercicio='{$albaran['codejercicio']}';"; $resultado = $this->bd->select($consulta); if ($resultado) { $albaran['numero'] = $resultado[0]['valorout']; $albaran['secuenciaid'] = $resultado[0]['id']; } else { $retorno = false; $error = "Error al obtener el número de albarán"; } /// comprobamos si el ejercicio sigue abierto if (!$this->ejercicios->abierto($albaran['codejercicio'])) { $retorno = false; $error = "Ejercicio Cerrado"; } /// comprobamos si la serie es sin iva $sin_iva = $this->serires->sin_iva($albaran['codserie']); } else { if ($retorno) { $retorno = false; $error = "Ejercicio o serie vacíos"; } } if ($retorno) { /// generamos el codigo del albaran $albaran['codigo'] = $albaran['codejercicio']; $albaran['codigo'] .= sprintf('%02s', $albaran['codserie']); $albaran['codigo'] .= sprintf('%06s', $albaran['numero']); /// obtenemos el idalbaran $resultado = $this->bd->select("SELECT last_value FROM albaranescli_idalbaran_seq;"); if ($resultado) { $albaran['idalbaran'] = $resultado[0]['last_value'] + 1; /// actualizamos la secuencia if (!$this->bd->exec("SELECT setval('\"albaranescli_idalbaran_seq\"',{$albaran['idalbaran']},'t');")) { $retorno = false; $error = "Error al actualizar la secuencia"; } } else { $retorno = false; $error = "Error al obtener el nuevo id del albarán"; } /// si tenemos los datos necesarios if ($albaran['idalbaran'] != '') { /// insertamos el albaran $consulta = "set datestyle = dmy;\n INSERT INTO albaranescli (idalbaran,codigo,fecha,nombrecliente,cifnif,codcliente,observaciones,coddivisa,numero,\n codserie,codpago,codagente,codalmacen,coddir,direccion,codpostal,ciudad,provincia,apartado,codpais,codejercicio,numero2)\n VALUES ('{$albaran['idalbaran']}','{$albaran['codigo']}','{$albaran['fecha']}','{$cliente['nombre']}','{$cliente['cifnif']}','{$cliente['codcliente']}',\n '{$albaran['observaciones']}','{$albaran['coddivisa']}','{$albaran['numero']}','{$albaran['codserie']}','{$albaran['codpago']}',\n '{$albaran['codagente']}','{$albaran['codalmacen']}','{$direccion['id']}','{$direccion['direccion']}','{$direccion['codpostal']}',\n '{$direccion['ciudad']}','{$direccion['provincia']}','{$direccion['apartado']}','{$direccion['codpais']}','{$albaran['codejercicio']}','{$albaran['numero2']}');"; $neto = 0; $iva = 0; $total = 0; /// insertamos las lineas foreach ($lineas as $linea) { /// calculamos el importe $importe = ($linea['pvpunitario'] - $linea['pvpunitario'] * $linea['dtopor'] / 100) * $linea['cantidad']; $importe_sdto = $linea['pvpunitario'] * $linea['cantidad']; $consulta .= "INSERT INTO lineasalbaranescli (idalbaran,referencia,descripcion,pvpunitario,cantidad,pvpsindto,pvptotal,codimpuesto,iva,dtopor)\n VALUES ('{$albaran['idalbaran']}','{$linea['referencia']}',"; if ($linea['descripcion2'] == "") { $consulta .= "'" . htmlspecialchars($linea['descripcion'], ENT_QUOTES) . "',"; } else { $consulta .= "'" . htmlspecialchars($linea['descripcion2'], ENT_QUOTES) . "',"; } if ($sin_iva) { $consulta .= "'{$linea['pvpunitario']}','{$linea['cantidad']}','{$importe_sdto}','{$importe}',NULL,'0','{$linea['dtopor']}');"; $neto += $importe; $total += $importe; } else { $consulta .= "'{$linea['pvpunitario']}','{$linea['cantidad']}','{$importe_sdto}','{$importe}','{$linea['codimpuesto']}','{$linea['iva']}','{$linea['dtopor']}');"; $neto += $importe; $iva += $importe * $linea['iva'] / 100; $total += $importe + $importe * $linea['iva'] / 100; } } /// actualizamos el albaran $consulta .= "UPDATE albaranescli SET neto='{$neto}',totaliva='{$iva}',totaleuros='{$total}',total='{$total}' WHERE idalbaran='{$albaran['idalbaran']}';"; /// actualizamos la secuencia $albaran['nuevonumero'] = $albaran['numero'] + 1; $consulta .= "UPDATE secuencias SET valorout='{$albaran['nuevonumero']}' WHERE nombre='nalbarancli' AND id='{$albaran['secuenciaid']}';"; /// Ejecutamos la sentencia if ($this->bd->exec($consulta)) { /// descontamos de stock if ($des_stock) { foreach ($lineas as $linea) { $mis_articulos->sum_stock($linea['referencia'], $albaran['codalmacen'], 0 - $linea['cantidad'], $error); } } } else { $retorno = false; $error = "Error al guardar el albarán: " . $consulta; } } } return $retorno; }