Skip to content

Commit

Permalink
negativos a descuento, uso cfdi
Browse files Browse the repository at this point in the history
  • Loading branch information
Francisco González committed Mar 20, 2018
1 parent c254e6d commit cfa7a0a
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 48 deletions.
13 changes: 12 additions & 1 deletion README.md
@@ -1,7 +1,18 @@
# WHMCS Addon de Factura.com versión 2.0.7
# WHMCS Addon de Factura.com versión 2.0.8

# Changelog


## [2.0.8] - 2018-03-20

### Added
- Multiple RFC para facturar.
- UsoCFDI ahora el usuario podrá elegí el uso de su cfdi.
- Ahora los conceptos negativos son tomados como descuentos que se aplican al CFDI

### Fixed
- Fix actualización de datos de cliente.

## [2.0.7] - 2018-02-06

### Fixed
Expand Down
5 changes: 4 additions & 1 deletion facturacion.php
Expand Up @@ -40,6 +40,9 @@
}
}

//Traemos los usos de CFDI
$UsosCFDI = $CoreModule->getUsoCFDI();

$ca->caching = false;
$ca->assign('clientW', $ca->getUserID());
$ca->assign('whmcsInvoices', $OrdersWHMCS);
Expand All @@ -48,7 +51,7 @@
$ca->assign('apiUrl', $urlCallApi);
$ca->assign('serieInvoices', $Settings['Serie']);
$ca->assign('UsoCFDI', $Settings['UsoCFDI']);

$ca->assign('Usos', $UsosCFDI);


} else {
Expand Down
136 changes: 93 additions & 43 deletions modules/addons/facturacom/lib/Admin/CoreModule.php
Expand Up @@ -237,11 +237,16 @@ public function getWhmcsInvoices($UserID)
return $collection;
}

public function getInvoicesFacturacom($UserID)
public function getInvoicesFacturacom($UserID, $Pedidos)
{
$Setting = $this->getGonfiguration();
$uri_base = $this->getURL($Setting);
$uri = $uri_base . 'v3/cfdi33/list?type_document=factura&client_reference=' . $UserID;

if (!isset($Pedidos)) {
$uri = $uri_base . 'v3/cfdi33/list?type_document=factura&client_reference=' . $UserID;
} else {
$uri = $uri_base . 'v3/cfdi33/list?type_document=factura&client_reference=' . $UserID . '&pedidos=' . base64_encode(implode(",", $Pedidos));
}

$invoices_filtred = [];

Expand Down Expand Up @@ -437,7 +442,7 @@ public function getLocation($cp)
* @param String $paymentMethod
* @return Array
*/
public function createInvoice($orderNum, $orderItems, $clientData, $serieInvoices, $clientW, $paymentMethod, $numerocuenta)
public function createInvoice($orderNum, $orderItems, $clientData, $serieInvoices, $clientW, $paymentMethod, $numerocuenta, $usoCFDI)
{

/*if ($clientData['clientUID'] == "") {
Expand All @@ -451,43 +456,41 @@ public function createInvoice($orderNum, $orderItems, $clientData, $serieInvoice
$clientUID = $clientData["clientUID"] ?: false;
$clientRFC = $clientData['fiscal-rfc'];
$invoiceData = [];

//si el uid de cliente no está vacio entonces...
if (!empty($clientUID)) {
$clientFactura = $this->getClientFacturacom($clientRFC);
} else {
//preparamos la inserción de cliente
$params = array(
'nombre' => $clientData["general-nombre"],
'apellidos' => $clientData["general-apellidos"],
'email' => $clientData["general-email"],
'telefono' => $clientData["fiscal-telefono"],
'razons' => $clientData["fiscal-nombre"],
'rfc' => $clientData["fiscal-rfc"],
'calle' => $clientData["fiscal-calle"],
'numero_exterior' => $clientData["fiscal-exterior"],
'numero_interior' => $clientData["fiscal-interior"],
'codpos' => $clientData["fiscal-cp"],
'colonia' => $clientData["fiscal-colonia"],
'estado' => $clientData["fiscal-estado"],
'ciudad' => $clientData["fiscal-municipio"],
'delegacion' => $clientData["fiscal-municipio"],
'save' => true,
'client_reference' => $clientW,
);

$processClient = $this->sendClientFacturacom($params, $clientUID);

if ($processClient->response != 'success') {
return [
'response' => 'error',
'message' => 'Ha ocurrido un error. Por favor revise sus datos e inténtelo de nuevo.',
];
}

$clientFactura = $processClient;
}

$Descuento = 0;

//preparamos la inserción de cliente
$params = array(
'nombre' => $clientData["general-nombre"],
'apellidos' => $clientData["general-apellidos"],
'email' => $clientData["general-email"],
'telefono' => $clientData["fiscal-telefono"],
'razons' => $clientData["fiscal-nombre"],
'rfc' => $clientData["fiscal-rfc"],
'calle' => $clientData["fiscal-calle"],
'numero_exterior' => $clientData["fiscal-exterior"],
'numero_interior' => $clientData["fiscal-interior"],
'codpos' => $clientData["fiscal-cp"],
'colonia' => $clientData["fiscal-colonia"],
'estado' => $clientData["fiscal-estado"],
'ciudad' => $clientData["fiscal-municipio"],
'delegacion' => $clientData["fiscal-municipio"],
'save' => true,
'client_reference' => $clientW,
);

//enviamos la info
$processClient = $this->sendClientFacturacom($params, $clientUID);
//print_r($processClient); die;

//validamos el proceso
if ($processClient->response == 'error') {
return [
'response' => 'error',
'message' => 'Ha ocurrido un error. Por favor revise sus datos e inténtelo de nuevo.',
];
}

$clientFactura = $processClient;
$itemsCollection = $orderItems;
$invoiceConcepts = [];
//print_r($orderItems); die;
Expand Down Expand Up @@ -521,7 +524,10 @@ public function createInvoice($orderNum, $orderItems, $clientData, $serieInvoice
$TipoFactor = 'Exento';
$importeImpuesto = 0;
$TasaOCuota = 0;
}
} else if ($importeImpuesto < 0) {
$Descuento += ($productPrice * -1);
continue;
}

$product = [
'ClaveProdServ' => $value->ClaveProdServ,
Expand All @@ -547,12 +553,27 @@ public function createInvoice($orderNum, $orderItems, $clientData, $serieInvoice
$num_cta = $numerocuenta;
}

//return print_r($invoiceConcepts);
// Volvemos a recorrer los conceptos para agregar el descuento
$asignaDescuento = 0;
$Descuento = round($Descuento, 2);
foreach ($invoiceConcepts as $kconept => $concept) {
# code...
if (($concept['ValorUnitario'] * $concept['Cantidad']) > $Descuento && $asignaDescuento == 0) {
$invoiceConcepts[$kconept]['Descuento'] = $Descuento;

foreach ($invoiceConcepts[$kconept]['Impuestos']['Traslados'] as $kt => $valtras) {
# code...
$invoiceConcepts[$kconept]['Impuestos']['Traslados'][$kt]['Importe'] = round(((($concept['ValorUnitario'] * $concept['Cantidad']) - $Descuento) * 0.16), 2);
}

$asignaDescuento++;
}
}

$invoiceData = [
"Receptor" => ["UID" => $clientFactura['Data']['UID']],
"TipoDocumento" => "factura",
"UsoCFDI" => $Setting["UsoCFDI"],
"UsoCFDI" => $usoCFDI,
"Redondeo" => 2,
"Conceptos" => $invoiceConcepts,
"numerocuenta" => $numerocuenta,
Expand Down Expand Up @@ -734,5 +755,34 @@ public function GetClientFromWhmcs($userid) {

}

public function getUsoCFDI() {
$usosCFDI = [
'G01' => 'Adquisición de mercancias',
'G02' => 'Devoluciones, descuentos o bonificaciones',
'G03' => 'Gastos en general',
'I01' => 'Construcciones',
'I02' => 'Mobilario y equipo de oficina por inversiones',
'I03' => 'Equipo de transporte',
'I04' => 'Equipo de computo y accesorios',
'I05' => 'Dados, troqueles, moldes, matrices y herramental',
'I06' => 'Comunicaciones telefónicas',
'I07' => 'Comunicaciones satelitales',
'I08' => 'Otra maquinaria y equipo',
'D01' => 'Honorarios médicos, dentales y gastos hospitalarios.',
'D02' => 'Gastos médicos por incapacidad o discapacidad',
'D03' => 'Gastos funerales.',
'D04' => 'Donativos.',
'D05' => 'Intereses reales efectivamente pagados por créditos hipotecarios (casa habitación).',
'D06' => 'Aportaciones voluntarias al SAR.',
'D07' => 'Primas por seguros de gastos médicos.',
'D08' => 'Gastos de transportación escolar obligatoria.',
'D09' => 'Depósitos en cuentas para el ahorro, primas que tengan como base planes de pensiones.',
'D10' => 'Pagos por servicios educativos (colegiaturas)',
'P01' => 'Por definir',
];

return $usosCFDI;
}


}
3 changes: 2 additions & 1 deletion modules/addons/facturacom/lib/apihandler.php
Expand Up @@ -108,6 +108,7 @@ function createInvoice()
$clientW = $_POST['clientW'];
$paymentMethod = $_POST['paymentMethod'];
$numerocuenta = $_POST['numerocuenta'];
$usoCFDI = $_POST['UsoCFDI'];

return $CoreModule->createInvoice($orderNum, $orderItems, $clientData, $serieInvoices, $clientW, $paymentMethod, $numerocuenta);
return $CoreModule->createInvoice($orderNum, $orderItems, $clientData, $serieInvoices, $clientW, $paymentMethod, $numerocuenta, $usoCFDI);
}
13 changes: 11 additions & 2 deletions templates/customer_area/clientfacturacion.tpl
Expand Up @@ -6,7 +6,6 @@
<h3>Pedidos sin facturar</h3>
<input type="hidden" id="systemURL" value="{$systemURL}">
<input type="hidden" id="serieInvoices" value="{$serieInvoices}">
<input type="hidden" id="UsoCFDI" value="{$UsoCFDI}">
<input type="hidden" id="clientW" value="{$clientW}">

<div class="table-container clearfix">
Expand Down Expand Up @@ -196,7 +195,7 @@
<input type="hidden" name="csrf" value="">
<input type="hidden" id="apimethod" name="apimethod" value="create">
<div class="input-group">
<label for="disabledSelect">Método de pago</label>
<label for="disabledSelect">Forma de pago</label>
<select class="input-cap f-input f-top valid" id="paymentMethod">
<option value="01">Efectivo</option>
<option value="02">Cheque nominativo</option>
Expand All @@ -214,6 +213,16 @@
<label for="input-numerocuenta">Últimos 4 dígitos de la cuenta</label>
<input type="text" class="input-cap f-input f-top" id="input-numerocuenta" name="input-numerocuenta" value="" placeholder="" data-validation="required" data-validation-error-msg="Por favor ingrese un valor válido" >
</div>

<div class="input-group">
<label for="disabledSelect">Uso CFDI</label>

<select class="input-cap f-input f-top valid" id="UsoCFDI" name="UsoCFDI">
{foreach $Usos as $key => $Uso}
<option value="{$key}" {if $key eq $UsoCFDI}selected="selected"{/if}>{$Uso}</option>
{/foreach}
</select>
</div>
</div>

<div class="messages">
Expand Down

0 comments on commit cfa7a0a

Please sign in to comment.