<?php
final class Modelos_Movimientos_OrdenCompraInt extends Modelo {
	protected $_db = null;
	public $mensajes = array();

	public function iniciarDb($db) {
    	if (!$this->_db) {
			$this->_db = $db;
        }
    }

    public function modificar($id) {
		try {
			$datosArray = array();
			
			// Fecha Actual
			$fecha = date('d/m/Y');

			// Nombre de Agente
			$sth = $this->_db->prepare("SELECT nombre, apellidos FROM usuarios WHERE id = ? LIMIT 1");
			$sth->bindParam(1, $_SESSION['login_id']);
			if(!$sth->execute()) throw New Exception();
			$datos = $sth->fetch();
			$agente = $datos['nombre'] . ' ' . $datos['apellidos'];

			// Tipo de cambio DOF
			$xml=simplexml_load_file("http://dof.gob.mx/indicadores.xml");
			$tipoCambio = $xml->channel->item[0]->description; if ($tipoCambio < 10.00) $tipoCambio = 12.50;
			// $tipoCambio = '13.00';

			$datosArray['idOrdenCompra'] = $id;
			$datosArray['agente'] = $agente;
			$datosArray['tipoCambio'] = $tipoCambio;

			// Datos de orden de compra
			$sth = $this->_db->prepare("SELECT c.alfanumerico, c.id, c.id_proveedor, cl.codigo, cl.razon_social, c.moneda, c.id_contacto, s.nombre, s.telefono, s.correo, c.subtotal, c.impuesto, c.total, c.observaciones, c.referencia, c.tipo_pago
			FROM ordenes_compra c
			JOIN clientes cl
			ON c.id_proveedor = cl.id
			LEFT JOIN clientes_solicitantes s
			ON c.id_contacto = s.id
			WHERE c.id = ?");
			$sth->bindParam(1, $id);
			if(!$sth->execute()) throw New Exception();
			$datos = $sth->fetch();

			$datosArray['alfanumerico'] = $datos['alfanumerico'];
			$datosArray['id'] = $datos['id'];
			$datosArray['id_proveedor'] = $datos['id_proveedor'];
			$datosArray['codigo'] = $datos['codigo'];
			$datosArray['razon_social'] = $datos['razon_social'];
			$datosArray['moneda'] = $datos['moneda'];
			$datosArray['id_contacto'] = $datos['id_contacto'];
			$datosArray['nombre'] = $datos['nombre'];
			$datosArray['telefono'] = $datos['telefono'];
			$datosArray['correo'] = $datos['correo'];
			$datosArray['tipo_pago'] = $datos['tipo_pago'];
			$datosArray['subtotal'] = $datos['subtotal'];
			$datosArray['impuesto'] = $datos['impuesto'];
			$datosArray['total'] = $datos['total'];
			$datosArray['observaciones'] = $datos['observaciones'];
			$datosArray['referencia'] = $datos['referencia'];

			$monedaElegida = $datos['moneda'];
			
			// Partes
			$sth = $this->_db->prepare("SELECT p.id, cp.cantidad, p.codigo, pm.nombre AS um, p.descripcion, cp.proveedor, cp.precio, p.moneda
				FROM ordenes_compra_partes cp
				JOIN partes p
				ON p.id = cp.id_parte
				JOIN partes_medidas pm
				ON pm.id = p.id_unidad_compra
				WHERE cp.id_orden_compra = ? ORDER BY cp.id ASC");
			$sth->bindParam(1, $id);
			if(!$sth->execute()) throw New Exception();
			
			$partesArray = array();
			$x = 1;
			while ($datos = $sth->fetch()) {
				$monedaParte = $datos['moneda'];

				// Proveedores
				$proveedor = array();
				$idParte = $datos['id'];
				$sth2 = $this->_db->prepare("SELECT p.proveedor1, p.proveedor_costo1, p.proveedor2, p.proveedor_costo2, p.proveedor3, p.proveedor_costo3 FROM partes p WHERE id = ?");
				$sth2->bindParam(1, $idParte);
				if(!$sth2->execute()) throw New Exception();
				$datos2 = $sth2->fetch();

				$datos2["proveedor1"] == ''? $proveedor[1] = 'NO ESPECIFICADO' : $proveedor[1] = $datos2["proveedor1"];
				$datos2["proveedor2"] == ''? $proveedor[2] = 'NO ESPECIFICADO' : $proveedor[2] = $datos2["proveedor2"];
				$datos2["proveedor3"] == ''? $proveedor[3] = 'NO ESPECIFICADO' : $proveedor[3] = $datos2["proveedor3"];
				
				// Elegida = PESOS | Parte = PESOS
				if ($monedaElegida == 1 && $monedaParte == 1) {
					$proveedores = array();
					if ($datos2['proveedor1'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo1'],
							$proveedor[1],
							'[' . $proveedor[1] . '] - [$' . $datos2['proveedor_costo1'] . ' PESOS]',
							1
						);
					}
					if ($datos2['proveedor2'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo2'],
							$proveedor[2],
							'[' . $proveedor[2] . '] - [$' . $datos2['proveedor_costo2'] . ' PESOS]',
							2
						);
					}
					if ($datos2['proveedor3'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo3'],
							$proveedor[3],
							'[' . $proveedor[3] . '] - [$' . $datos2['proveedor_costo3'] . ' PESOS]',
							3
						);
					}

					sort($proveedores);
					$proveedoresOpciones = '';
					$y = 1;
					foreach($proveedores as $proveedorDatos) {
						if ($datos2['proveedor'] == $proveedorDatos[1]) {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '" selected="selected">' . $proveedorDatos[2] . '</option>';
						} else {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '">' . $proveedorDatos[2] . '</option>';
						}
					}

					$partesArray[$x]['proveedores'] = $proveedoresOpciones;
				}
				// Elegida = DOLARES | Parte = PESOS
				if ($monedaElegida == 2 && $monedaParte == 1) {
					$proveedores = array();

					if ($datos2['proveedor1'] != '') {
						$costo1 = number_format((float)$datos2['proveedor_costo1']/$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo1,
							$proveedor[1],
							'[' . $proveedor[1] . '] - [$' . $costo1 . ' DLLS]',
							1
						);
					}
					if ($datos2['proveedor2'] != '') {
						$costo2 = number_format((float)$datos2['proveedor_costo2']/$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo2,
							$proveedor[2],
							'[' . $proveedor[2] . '] - [$' . $costo2 . ' DLLS]',
							2
						);
					}
					if ($datos2['proveedor3'] != '') {
						$costo3 = number_format((float)$datos2['proveedor_costo3']/$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo3,
							$proveedor[3],
							'[' . $proveedor[3] . '] - [$' . $costo3 . ' DLLS]',
							3
						);
					}

					sort($proveedores);
					$proveedoresOpciones = '';
					$y = 1;
					foreach($proveedores as $proveedorDatos) {
						if ($datos2['proveedor'] == $proveedorDatos[1]) {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '" selected="selected">' . $proveedorDatos[2] . '</option>';
						} else {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '">' . $proveedorDatos[2] . '</option>';
						}
					}

					$partesArray[$x]['proveedores'] = $proveedoresOpciones;
				}
				// Elegida = DOLARES | Parte = DOLARES
				if ($monedaElegida == 2 && $monedaParte == 2) {
					$proveedores = array();
					if ($datos2['proveedor1'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo1'],
							$proveedor[1],
							'[' . $proveedor[1] . '] - [$' . $datos2['proveedor_costo1'] . ' DLLS]',
							1
						);
					}
					if ($datos2['proveedor2'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo2'],
							$proveedor[2],
							'[' . $proveedor[2] . '] - [$' . $datos2['proveedor_costo2'] . ' DLLS]',
							2
						);
					}
					if ($datos2['proveedor3'] != '') {
						$proveedores[] = array(
							$datos2['proveedor_costo3'],
							$proveedor[3],
							'[' . $proveedor[3] . '] - [$' . $datos2['proveedor_costo3'] . ' DLLS]',
							3
						);
					}

					sort($proveedores);
					$proveedoresOpciones = '';
					$y = 1;
					foreach($proveedores as $proveedorDatos) {
						if ($datos2['proveedor'] == $proveedorDatos[1]) {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '" selected="selected">' . $proveedorDatos[2] . '</option>';
						} else {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '">' . $proveedorDatos[2] . '</option>';
						}
					}

					$partesArray[$x]['proveedores'] = $proveedoresOpciones;
				}
				// Elegida = PESOS | Parte = DOLARES
				if ($monedaElegida == 1 && $monedaParte == 2) {
					$proveedores = array();

					if ($datos2['proveedor1'] != '') {
						$costo1 = number_format((float)$datos2['proveedor_costo1']*$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo1,
							$proveedor[1],
							'[' . $proveedor[1] . '] - [$' . $costo1 . ' PESOS]',
							1
						);
					}
					if ($datos2['proveedor2'] != '') {
						$costo2 = number_format((float)$datos2['proveedor_costo2']*$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo2,
							$proveedor[2],
							'[' . $proveedor[2] . '] - [$' . $costo2 . ' PESOS]',
							2
						);
					}
					if ($datos2['proveedor3'] != '') {
						$costo3 = number_format((float)$datos2['proveedor_costo3']*$tipoCambio, 4, '.', '');
						$proveedores[] = array(
							$costo3,
							$proveedor[3],
							'[' . $proveedor[3] . '] - [$' . $costo3 . ' PESOS]',
							3
						);
					}

					sort($proveedores);
					$proveedoresOpciones = '';
					$y = 1;
					foreach($proveedores as $proveedorDatos) {
						if ($datos2['proveedor'] == $proveedorDatos[1]) {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '" selected="selected">' . $proveedorDatos[2] . '</option>';
						} else {
							$proveedoresOpciones .= '<option id="proveedor' . $x . '-costo-' . $proveedorDatos[3] . '" value="' . $proveedorDatos[1] . '" data-costo="' . $proveedorDatos[0] . '" data-numero="' . $proveedorDatos[3] . '">' . $proveedorDatos[2] . '</option>';
						}
					}

					$partesArray[$x]['proveedores'] = $proveedoresOpciones;
				}

				$partesArray[$x]['codigo'] = $datos['codigo'];
				$partesArray[$x]['id'] = $datos['id'];
				$partesArray[$x]['descripcion'] = $datos['descripcion'];
				$partesArray[$x]['um'] = $datos['um'];
				$partesArray[$x]['proveedor'] = $datos['proveedor'];
				$partesArray[$x]['cantidad'] = $datos['cantidad'];
				$partesArray[$x]['precio'] = $datos['precio'];
				
				// Elegida = PESOS | Parte = PESOS
				if ($monedaElegida == 1 && $monedaParte == 1) {
					$partesArray[$x]['total'] = number_format((float)$datos['cantidad']*$datos['precio'], 4, '.', '');
				}
				// Elegida = DOLARES | Parte = PESOS
				if ($monedaElegida == 2 && $monedaParte == 1) {
					$partesArray[$x]['total'] = number_format((float)($datos['cantidad']*$datos['precio'])/$tipoCambio, 4, '.', '');
				}
				// Elegida = DOLARES | Parte = DOLARES
				if ($monedaElegida == 2 && $monedaParte == 2) {
					$partesArray[$x]['total'] = number_format((float)$datos['cantidad']*$datos['precio'], 4, '.', '');
				}
				// Elegida = PESOS | Parte = DOLARES
				if ($monedaElegida == 1 && $monedaParte == 2) {
					$partesArray[$x]['total'] = number_format((float)($datos['cantidad']*$datos['precio'])*$tipoCambio, 4, '.', '');
				}

				$x++;
			}
			$datosArray['partes'] = $partesArray;
			$datosArray['conteoPartes'] = $x;

			return $datosArray;
		} catch (Exception $e) {
			echo Modelos_Sistema::status(0, $e->getMessage());
		}
	}
	
	public function nueva() {
		try {
			$datosArray = array();

			// Folio
			$sth = $this->_db->query("SELECT id FROM ordenes_compra ORDER BY id DESC LIMIT 1");
			$folio = $sth->fetchColumn()+1;
			
			// Fecha Actual
			$fecha = date('d/m/Y');

			// Nombre de Agente
			$sth = $this->_db->prepare("SELECT nombre, apellidos FROM usuarios WHERE id = ? LIMIT 1");
			$sth->bindParam(1, $_SESSION['login_id']);
			if(!$sth->execute()) throw New Exception();
			$datos = $sth->fetch();
			$agente = $datos['nombre'] . ' ' . $datos['apellidos'];

			// Tipo de cambio DOF
			$xml=simplexml_load_file("http://dof.gob.mx/indicadores.xml");
			$tipoCambio = $xml->channel->item[0]->description; if ($tipoCambio < 10.00) $tipoCambio = 12.50;
			// $tipoCambio = '13.00';

			$datosArray['folio'] = $folio;
			$datosArray['agente'] = $agente;
			$datosArray['tipoCambio'] = $tipoCambio;
			
			return $datosArray;
		} catch (Exception $e) {
			echo Modelos_Sistema::status(0, $e->getMessage());
		}
	}

	public function generar($datos, $opciones = null) {
		try {
			if(!empty($datos['cotizacionModificada'])) {
				$sth = $this->_db->prepare("DELETE FROM ordenes_compra WHERE id = ?");
				$sth->bindParam(1, $datos['cotizacionModificada']);
				if(!$sth->execute()) throw New Exception();

				$sth = $this->_db->prepare("DELETE FROM ordenes_compra_partes WHERE id_orden_compra = ?");
				$sth->bindParam(1, $datos['cotizacionModificada']);
				if(!$sth->execute()) throw New Exception();
			}
			
			$idAgente = $_SESSION['login_id'];
			$alfanumerico = strtoupper($datos['folioAlfanumerico']);
			$idProveedor = $datos['idProveedor'];
			$moneda = $datos['moneda'];
			$subtotal = $datos['subtotal'];
			$impuesto = $datos['impuesto'];
			$total = $datos['total'];
			$observaciones = strtoupper($datos['observaciones']);
			$tipoPago = $datos['tipoPago'];
			$referencia = strtoupper($datos['referencia']);
			@$pais = $datos['pais'];

			// Si el solicitante no existe y se va a agregar uno nuevo
			if ($datos['nuevo-solicitante'] == 1) {
				$nombreSolicitante = strtoupper($datos['nombreSolicitante']);
				$telefonoSolicitante = strtoupper($datos['telefonoSolicitante']);
				$correoSolicitante = strtolower($datos['correoSolicitante']);

				// Agregando datos del nuevo solicitante
				$arregloDatos = array($idProveedor, $nombreSolicitante, $telefonoSolicitante, $correoSolicitante);

				$sth = $this->_db->prepare("INSERT INTO clientes_solicitantes (id_cliente, nombre, telefono, correo) VALUES (?, ?, ?, ?)");
				if(!$sth->execute($arregloDatos)) throw New Exception();
				$idContacto = $this->_db->lastInsertId();

				if(!empty($datos['cotizacionModificada'])) {
					$arregloDatos = array($datos['cotizacionModificada'], $alfanumerico, $idAgente, $idProveedor, $idContacto, $moneda, $subtotal, $impuesto, $total, $observaciones, $pais, $tipoPago, $referencia);

					$sth = $this->_db->prepare("INSERT INTO ordenes_compra (id, alfanumerico, id_agente, id_proveedor, id_contacto, moneda, subtotal, impuesto, total, observaciones, pais, tipo_pago, referencia) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
					if(!$sth->execute($arregloDatos)) throw New Exception();
					$id = $datos['cotizacionModificada'];
				} else {
					$arregloDatos = array($alfanumerico, $idAgente, $idProveedor, $idContacto, $moneda, $subtotal, $impuesto, $total, $observaciones, $pais, $tipoPago, $referencia);

					$sth = $this->_db->prepare("INSERT INTO ordenes_compra (alfanumerico, id_agente, id_proveedor, id_contacto, moneda, subtotal, impuesto, total, observaciones, pais, tipo_pago, referencia) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
					if(!$sth->execute($arregloDatos)) throw New Exception();
					$id = $this->_db->lastInsertId();
				}
			// Si el solicitante ya existe
			} else {
				if(!empty($datos['cotizacionModificada'])) {
					$idContacto = $datos['idSolicitante'];

					$arregloDatos = array($datos['cotizacionModificada'], $alfanumerico, $idAgente, $idProveedor, $idContacto, $moneda, $subtotal, $impuesto, $total, $observaciones, $pais, $tipoPago, $referencia);

					$sth = $this->_db->prepare("INSERT INTO ordenes_compra (id, alfanumerico, id_agente, id_proveedor, id_contacto, moneda, subtotal, impuesto, total, observaciones, pais, tipo_pago, referencia) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
					if(!$sth->execute($arregloDatos)) throw New Exception();
					$id = $this->_db->lastInsertId();
				} else {
					$idContacto = $datos['idSolicitante'];

					$arregloDatos = array($alfanumerico, $idAgente, $idProveedor, $idContacto, $moneda, $subtotal, $impuesto, $total, $observaciones, $pais, $tipoPago, $referencia);

					$sth = $this->_db->prepare("INSERT INTO ordenes_compra (alfanumerico, id_agente, id_proveedor, id_contacto, moneda, subtotal, impuesto, total, observaciones, pais, tipo_pago, referencia) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
					if(!$sth->execute($arregloDatos)) throw New Exception();
					$id = $this->_db->lastInsertId();
				}
			}

			// Se selecciona el codigo del proveedor para insertarlo en los numeros de parte que no tienen especificado el proveedor
			$sth = $this->_db->prepare("SELECT codigo FROM clientes WHERE id = ?");
			$sth->bindParam(1, $idProveedor);
			if(!$sth->execute()) throw New Exception();
			$dato = $sth->fetch();
			$nombreProveedor = $dato['codigo'];

			for($x=1; $x<=100; $x++) {
				$idParte = $datos["idParte$x"];
				@$proveedor = $datos["proveedor$x"];
				$cantidad = $datos["cantidad$x"];
				$precio = $datos["precio$x"];

				if ($idParte && $cantidad && $precio) {
					if ($proveedor == 'NO ESPECIFICADO') {
						$idProveedorSeleccionado = $datos["idProveedorSeleccionado$x"];
						$sth = $this->_db->prepare("UPDATE partes SET proveedor$idProveedorSeleccionado = ? WHERE id = ?");
						$arregloDatos = array($nombreProveedor, $idParte);
						if(!$sth->execute($arregloDatos)) throw New Exception();
					} elseif ($proveedor == '') {
						$idProveedorSeleccionado = 1;
						$sth = $this->_db->prepare("UPDATE partes SET proveedor$idProveedorSeleccionado = ? WHERE id = ?");
						$arregloDatos = array($nombreProveedor, $idParte);
						if(!$sth->execute($arregloDatos)) throw New Exception();
					}
					
					$sth = $this->_db->prepare("INSERT INTO ordenes_compra_partes (id_orden_compra, id_parte, proveedor, cantidad, cantidad_pendiente, precio) VALUES (?, ?, ?, ?, ?, ?)");
					$arregloDatos = array($id, $idParte, $proveedor, $cantidad, $cantidad, $precio);
					if(!$sth->execute($arregloDatos)) throw New Exception();
				}
			}

			switch($opciones) {
				case 1:
				return $id;
				break;

				default:
				header('Location:' . STASIS. '/movimientos/ordenes_compra_int/1');
				break;
			}
		} catch (Exception $e) {
			$this->mensajes[] = Modelos_Sistema::status(0, $e->getMessage());
		}
	}

	public function visualizar($id) {
		$this->pdf($id,0,1);
	}

	public function descargar($datos) {
		$idOrdenCompraGenerada = $this->generar($datos, 1);
		$this->pdf($idOrdenCompraGenerada, 1);
	}

	public function enviar($datos) {
		$idOrdenCompraGenerada = $this->generar($datos, 1);
		$nombrePdf = $this->pdf($idOrdenCompraGenerada);
		$correo = Modelos_Contenedor::crearModelo('Correo');
		$correo->ordenCompraInt($nombrePdf, 0, $datos['correoSolicitante']);
		if (!empty($correo->mensajes)) $this->mensajes[] = $correo->mensajes[0];
		unlink(ROOT_DIR . "data/tmp/$nombrePdf");
	}

	public function descargarEnviar($datos) {
		$idOrdenCompraGenerada = $this->generar($datos, 1);
		$nombrePdf = $this->pdf($idOrdenCompraGenerada);
		$correo = Modelos_Contenedor::crearModelo('Correo');
		$correo->ordenCompraInt($nombrePdf);
		if (!empty($correo->mensajes)) $this->mensajes[] = $correo->mensajes[0];
		unlink(ROOT_DIR . "data/tmp/$nombrePdf");
		$this->pdf($idOrdenCompraGenerada, 1);
	}

	public function pdf($id, $descargar = null, $visualizar = null) {
		// Datos de Cotizacion
		$sth = $this->_db->prepare("SELECT ordenes_compra.alfanumerico, ordenes_compra.id, usuarios.grado, CONCAT(usuarios.nombre, ' ', usuarios.apellidos) AS agente, usuarios.email, ordenes_compra.id_proveedor, clientes.razon_social AS proveedor, clientes.rfc, ordenes_compra.moneda, subtotal, ordenes_compra.impuesto, total, ordenes_compra.observaciones, ordenes_compra.fecha_creacion
			FROM ordenes_compra
			JOIN usuarios
			ON usuarios.id = ordenes_compra.id_agente
			JOIN clientes
			ON clientes.id = ordenes_compra.id_proveedor
			WHERE ordenes_compra.id = ?");
		$sth->bindParam(1, $id);
		if(!$sth->execute()) throw New Exception();
		$datos = $sth->fetch();

		$folio = $datos['alfanumerico'] . '-' . $datos['id'];
		$fechaCreacion = Modelos_Fecha::formatearFechaHora($datos['fecha_creacion']);
		switch($datos['grado']) {
			case 0: $grado = ''; break;
			case 1: $grado = 'LIC. '; break;
			case 2: $grado = 'ING. '; break;
			case 3: $grado = 'MTRO. '; break;
			case 4: $grado = 'MTRA. '; break;
			case 5: $grado = 'DR. '; break;
			case 6: $grado = 'DRA. '; break;
		}
		$agente = $grado . mb_strtoupper($datos['agente'], 'UTF-8');
		$agenteCorreo = $datos['email'];
		$rfc = $datos['rfc'];
		$moneda = $datos['moneda'];
		$totalLetras = Modelos_Caracteres::num2letras($datos['total'], $moneda);
		if ($moneda == 1) {
			$moneda = 'PESOS';
		} else {
			$moneda = 'DÓLARES';
		}
		$idProveedor = $datos['id_proveedor'];
		$proveedor = $datos['proveedor'];
		
		require_once(APP . 'plugins/tcpdf/tcpdf.php');

		$pdf = new XIPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
		$pdf->SetCreator(PDF_CREATOR);
		$pdf->SetAuthor('Xpress Industrial');
		$pdf->SetTitle('Orden de Compra - Xpress Industrial');
		$pdf->SetSubject('Orden de Compra - Xpress Industrial');
		$pdf->SetKeywords('Xpress Industrial, Orden de Compra');
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
		$pdf->SetFont('helvetica', '', 10);
		$pdf->AddPage();

		$subtotal = $datos['subtotal'];
		$impuesto = $datos['impuesto'];
		$total = $datos['total'];
		@$observaciones = $datos['observaciones'];

		// Direccion del Cliente
		$sth = $this->_db->prepare("SELECT nombre_calle, num_exterior, num_interior, colonia, cp, telefono1, email, pais, estado, ciudad FROM direcciones WHERE id_catalogo = ? AND id_tipo = 1");
		$sth->bindParam(1, $idProveedor);
		if(!$sth->execute()) throw New Exception();
		$datos = $sth->fetch();

		@$nombreCalle = $datos['nombre_calle'];
		@$numExterior = $datos['num_exterior'];
		@$numInterior = $datos['num_interior'];
		@$colonia = $datos['colonia'];
		@$cp = $datos['cp'];
		(empty($datos['telefono1'])) ? $telefono1 = '' : $telefono1 = $datos['telefono1'];
		@$email = $datos['email'];
		@$pais = $datos['pais'];
		@$estado = $datos['estado'];
		@$ciudad = $datos['ciudad'];

		$sth = $this->_db->prepare("SELECT clientes_solicitantes.nombre, clientes_solicitantes.telefono, clientes_solicitantes.correo
			FROM ordenes_compra
			JOIN clientes_solicitantes
			ON clientes_solicitantes.id = ordenes_compra.id_contacto
			WHERE ordenes_compra.id = ?");
		$sth->bindParam(1, $id);
		if(!$sth->execute()) throw New Exception();
		$datos = $sth->fetch();
		$nombreSolicitante = $datos['nombre'];
		$telefonoSolicitante = $datos['telefono'];
		$correoSolicitante = $datos['correo'];

		// Partes
		$sth = $this->_db->prepare("SELECT p.id, cp.cantidad, p.codigo, pm.nombre AS um, p.descripcion, cp.precio
			FROM ordenes_compra_partes cp
			JOIN partes p
			ON p.id = cp.id_parte
			LEFT JOIN partes_medidas pm
			ON pm.id = p.id_unidad_compra
			WHERE cp.id_orden_compra = ? ORDER BY cp.id ASC");
		$sth->bindParam(1, $id);
		if(!$sth->execute()) throw New Exception();
		
		$htmlPartidas = '';
		while ($datos = $sth->fetch()) {
			$htmlPartidas .= '<tr>';
			$htmlPartidas .= '<td style="text-align: center;">' . $datos['cantidad'] . '</td>';
			$htmlPartidas .= '<td style="text-align: center;">' . $datos['codigo'] . '</td>';
			$htmlPartidas .= '<td style="text-align: center;">' . $datos['um'] . '</td>';
			$htmlPartidas .= '<td style="text-align: center;">' . $datos['descripcion'] . '</td>';

			$precioUnitario = number_format($datos['precio'], 4, '.', ',');
			$htmlPartidas .= '<td style="text-align: center;">' . $precioUnitario . '</td>';
			$cantidadTotal = number_format($datos['cantidad']*$datos['precio'], 4, '.', '');
			$htmlPartidas .= '<td style="text-align: center;">' . $cantidadTotal . '</td>';
			$htmlPartidas .= '</tr>';
		}

		$stasis = STASIS;

		$html = <<<EOF
		<style type="text/css">
		.titulo {
		font-size: 10px;
		font-weight: bold;
		}
		.sinBorde {
		border-collapse: collapse;
		border: none;
		}
		.sinBorde tr td {
		font-family: Arial;
		font-size: 8px;
		border: none;
		}
		#partidas {
			border-collapse: collapse;
			font-size: 6px;
		}
		#partidas tr td {
			font-family: Arial;
			font-size: 6px;
		}
		</style>
		</head><body>
		<table class="sinBorde" style="text-align: left; height: 178px;" border="0" cellpadding="0" cellspacing="3">
		<tbody>
		<tr>
		<td style="height: 31px; width: 170px;"><img src="$stasis/img/logo_xpress_group.png" width="170" alt=""></td>
		<td style="height: 31px; text-align: center; width: 250px;">
		<span class="titulo">XPRESS INDUSTRIAL GROUP</span><br>
		9785 MARCONI DR. STE. M<br>
		SAN DIEGO, CA 92154<br>
		PHONE: (619) 270 8577 (619) 270 8577</td>
		<td style="height: 31px; text-align: right; width: 95px;"><span style="font-weight: bold; font-size: 10px;">PURCHASE ORDER</span><br /><span style="font-weight: bold; font-size: 14px;">$folio</span><br>
		<span style="font-weight: bold;">Date:</span> $fechaCreacion</td>
		</tr>
		<tr>
		<td style="height: 57px; width: 180px;"><br /><span style="font-weight: bold;">Supplier:</span><br>
		$proveedor<br />
		$colonia $nombreCalle $numExterior $numInterior<br />
		$ciudad $estado $pais $cp<br />
		$telefono1
		</td>
		<td style="height: 57px; width: 207px; text-align: center;"><br /><span style="font-weight: bold;">
			Contact:</span><br>
			$nombreSolicitante <br />
			<span style="font-weight: bold;">Phone:</span><br />
			$telefonoSolicitante<br />
			<span style="font-weight: bold;">E-Mail:</span><br />
			$correoSolicitante
		</td>
		<td style="height: 57px; width: 130px; text-align: right;">
			<br />
			<span style="font-weight: bold;">Agent: </span>
			<br>
			$agente
		</td>
		</tr>
		</tbody>
		</table>
		<br>

		<strong>Dear supplier,</strong><br />
		We are pleased to submit the following purchase order.<br /><br />

		<table id="partidas" style="font-size: 7px; text-align: left; width: 100%; height: 59px;" border="1" cellpadding="2" cellspacing="0">
		<tbody>
		<tr>
		<td style="width:40px; text-align: center; background-color: rgb(228, 228, 228); font-weight: bold;">Quantity</td>
		<td style="width:100px; text-align: center; font-weight: bold; background-color: rgb(228, 228, 228);">Part Number</td>
		<td style="width:70px; text-align: center; background-color: rgb(228, 228, 228); font-weight: bold;">UOM</td>
		<td style="width:220px; text-align: center; background-color: rgb(228, 228, 228); font-weight: bold;">Description</td>
		<td style="width:50px; text-align: center; background-color: rgb(228, 228, 228); font-weight: bold;">Unit Price</td>
		<td style="width:50px; text-align: center; background-color: rgb(228, 228, 228); font-weight: bold;">Total</td>
		</tr>
		$htmlPartidas
		</tbody>
		</table><br />

		<br><table class="sinBorde" style="text-align: left; width: 367px; height: 59px;" border="1" cellpadding="2" cellspacing="0">
				<tbody>
					<tr>
						<td style="width: 367px;" rowspan="3"><strong>Notes:</strong> $observaciones</td>
						<td style="text-align: right; width: 64px;">
							<span style="font-weight: bold;">Subtotal:</span>
						</td>
						<td style="width: 100px;">
							$ $subtotal</td>
						</tr>
					<tr>
						<td style="text-align: right; width: 64px;"><span style="font-weight: bold;">Tax:</span></td>
						<td style="width: 100px;">$ $impuesto</td>
					</tr>
					<tr>
						<td style="text-align: right; width: 64px;"><span style="font-weight: bold;">Grand Total:</span></td>
						<td style="width: 100px;">$ $total</td>
					</tr>
				</tbody>
			</table><br /><br />

		If you have any questions concerning this purchase order, contact <strong>$agente</strong>.<br />
		At the phone number <strong>619 270 8577</strong>, <strong>619 270 8578</strong>, <strong>619 270 8579</strong><br />
		Or by email: <strong>$agenteCorreo</strong><br /><br />
		Thank you.
		</body></html>
EOF;

		$pdf->writeHTML($html, true, false, true, false, '');
		$pdf->lastPage();

		if ($descargar == 1) {
			$pdf->Output($folio . '.pdf', 'D');
		} elseif ($visualizar == 1) {
			$pdf->Output($folio . '.pdf', 'I');
		} else {
			$nombrePdf = uniqid() . '.pdf';
			$archivo = $pdf->Output(ROOT_DIR . "/data/tmp/$nombrePdf", 'F');
			return $nombrePdf;
		}

		exit();
	}
}