FEAT: Mejorar el manejo de ventas y asignación de paquetes en el controlador de SIM, evitar duplicados
This commit is contained in:
parent
304a7c3958
commit
01cd737b29
@ -110,6 +110,7 @@ public function destroy(SimCard $simCard)
|
|||||||
private $columnMap = [];
|
private $columnMap = [];
|
||||||
private $stats = [
|
private $stats = [
|
||||||
'created' => 0,
|
'created' => 0,
|
||||||
|
'updated' => 0,
|
||||||
'assigned' => 0,
|
'assigned' => 0,
|
||||||
'packages_created' => 0,
|
'packages_created' => 0,
|
||||||
'clients_created' => 0,
|
'clients_created' => 0,
|
||||||
@ -213,12 +214,22 @@ private function processRow(array $row, int $rowNumber = 0)
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$this->stats['created']++;
|
$this->stats['created']++;
|
||||||
|
} else {
|
||||||
|
// Ya existe, actualizar (msisdn en caso de cambio)
|
||||||
|
$sim->update([
|
||||||
|
'msisdn' => $row['msisdn'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (!isset($this->stats['updated'])) {
|
||||||
|
$this->stats['updated'] = 0;
|
||||||
|
}
|
||||||
|
$this->stats['updated']++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determinar si es una venta (tiene usuario Y paquete)
|
// Determinar si es una venta (tiene usuario Y paquete)
|
||||||
$hasUsuario = !empty($row['usuario']) &&
|
$hasUsuario = !empty($row['usuario']) &&
|
||||||
strtolower(trim($row['usuario'])) !== 'si' &&
|
strtolower(trim($row['usuario'])) !== 'si' &&
|
||||||
strtolower(trim($row['usuario'])) !== 'no';
|
strtolower(trim($row['usuario'])) !== 'no';
|
||||||
$hasPaquete = !empty($row['paquetes']);
|
$hasPaquete = !empty($row['paquetes']);
|
||||||
|
|
||||||
if ($hasUsuario && $hasPaquete) {
|
if ($hasUsuario && $hasPaquete) {
|
||||||
@ -314,16 +325,52 @@ private function processSale(SimCard $sim, array $row)
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Asignar paquete a la SIM
|
// Verificar si ya existe una venta para esta SIM con este paquete
|
||||||
$sim->packages()->attach($package->id, [
|
// (para evitar duplicados en reimportaciones)
|
||||||
'activated_at' => $saleDate,
|
$existingSale = Sale::whereHas('saleItems', function ($query) use ($sim, $package) {
|
||||||
'is_active' => true,
|
$query->where('sim_card_id', $sim->id)
|
||||||
]);
|
->where('package_id', $package->id);
|
||||||
|
})->where('client_id', $client->id)
|
||||||
|
->where('sale_date', $saleDate)
|
||||||
|
->exists();
|
||||||
|
|
||||||
|
if (!$existingSale) {
|
||||||
|
// Crear la venta
|
||||||
|
$sale = Sale::create([
|
||||||
|
'client_id' => $client->id,
|
||||||
|
'cash_close_id' => null, // Importaciones no tienen corte de caja
|
||||||
|
'total_amount' => $package->price,
|
||||||
|
'payment_method' => $paymentMethod,
|
||||||
|
'sale_date' => $saleDate,
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Crear el item de venta
|
||||||
|
SaleItem::create([
|
||||||
|
'sale_id' => $sale->id,
|
||||||
|
'sim_card_id' => $sim->id,
|
||||||
|
'package_id' => $package->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->stats['sales_created']++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Asignar paquete a la SIM (usando syncWithoutDetaching para evitar duplicados)
|
||||||
|
// Primero verificamos si ya existe la relación activa
|
||||||
|
$hasActivePackage = $sim->packages()
|
||||||
|
->wherePivot('package_id', $package->id)
|
||||||
|
->wherePivot('is_active', true)
|
||||||
|
->exists();
|
||||||
|
|
||||||
|
if (!$hasActivePackage) {
|
||||||
|
$sim->packages()->attach($package->id, [
|
||||||
|
'activated_at' => $saleDate,
|
||||||
|
'is_active' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
// Actualizar status de la SIM
|
// Actualizar status de la SIM
|
||||||
$sim->update(['status' => SimCardStatus::ASSIGNED]);
|
$sim->update(['status' => SimCardStatus::ASSIGNED]);
|
||||||
|
|
||||||
$this->stats['sales_created']++;
|
|
||||||
$this->stats['assigned']++;
|
$this->stats['assigned']++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,10 +448,17 @@ private function processPackageFromText(SimCard $sim, array $row)
|
|||||||
$packageInfo['price']
|
$packageInfo['price']
|
||||||
);
|
);
|
||||||
|
|
||||||
$sim->packages()->attach($package->id, [
|
$hasActivePackage = $sim->packages()
|
||||||
'activated_at' => now(),
|
->wherePivot('package_id', $package->id)
|
||||||
'is_active' => true,
|
->wherePivot('is_active', true)
|
||||||
]);
|
->exists();
|
||||||
|
|
||||||
|
if (!$hasActivePackage) {
|
||||||
|
$sim->packages()->attach($package->id, [
|
||||||
|
'activated_at' => now(),
|
||||||
|
'is_active' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function parsePackageText(string $text): ?array
|
private function parsePackageText(string $text): ?array
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user