First Commit
This commit is contained in:
Executable
+26
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\Company\Models\Company;
|
||||
|
||||
class PlatformService
|
||||
{
|
||||
/**
|
||||
* Obtém o nome da plataforma da company com ID 1
|
||||
* A company ID 1 representa a identidade da plataforma
|
||||
*/
|
||||
public function getPlatformName(): string
|
||||
{
|
||||
try {
|
||||
$company = Company::find(1);
|
||||
if ($company && !empty($company->platform_name) && $company->platform_name !== ':platformName') {
|
||||
return $company->platform_name;
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// Log error silently, return default
|
||||
}
|
||||
|
||||
return 'SysCMS';
|
||||
}
|
||||
}
|
||||
Executable
+90
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\Erpstock\Models\StockMovement;
|
||||
use Modules\Erpproducts\Models\Product;
|
||||
use App\Helpers\Log;
|
||||
use Illuminate\Database\Capsule\Manager as DB;
|
||||
|
||||
class ProductStockMovementService
|
||||
{
|
||||
/**
|
||||
* Create a new product stock movement.
|
||||
*
|
||||
* @param array $data Movement data
|
||||
* @param object $user User performing the action
|
||||
* @return StockMovement The created movement
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function createMovement(array $data, $user)
|
||||
{
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$product = Product::where('pr_id', $data['product_id'])
|
||||
->where('pr_idbus', $user->users_bus_id)
|
||||
->first();
|
||||
|
||||
if (!$product) {
|
||||
throw new \Exception(__('erpstock.erpstock.movements.error_product_not_found'));
|
||||
}
|
||||
|
||||
$quantity = (float)$data['quantity'];
|
||||
$type = $data['type']; // 'E' for Entry, 'S' for Exit
|
||||
|
||||
// Update product stock
|
||||
if ($type === 'E') {
|
||||
$product->pr_estocado += $quantity;
|
||||
} else {
|
||||
$product->pr_estocado -= $quantity;
|
||||
}
|
||||
$product->save();
|
||||
|
||||
// Create movement record
|
||||
$movementData = [
|
||||
'mepro_data' => date('Y-m-d'), // Fixed: Legacy system uses DATE type, not DATETIME
|
||||
'mepro_idpr' => $product->pr_id,
|
||||
'mepro_idoperador' => $user->users_id,
|
||||
'mepro_tipoes' => $type,
|
||||
'mepro_qtdade' => $quantity,
|
||||
'mepro_historico' => $data['history'] ?? '',
|
||||
'mepro_documento' => $data['document'] ?? '',
|
||||
'mepro_lote' => $data['batch'] ?? '',
|
||||
'mepro_custo' => $data['cost'] ?? 0,
|
||||
'mepro_preco' => $data['price'] ?? 0,
|
||||
'mepro_ipi' => $data['ipi'] ?? 0,
|
||||
'mepro_icms' => $data['icms'] ?? 0,
|
||||
'mepro_oimpostos' => $data['other_taxes'] ?? 0,
|
||||
'mepro_obs' => $data['observation'] ?? '',
|
||||
'mepro_idbus' => $user->users_bus_id,
|
||||
'mepro_idfornecedor' => $data['supplier_id'] ?? 0,
|
||||
'mepro_idcliente' => $data['customer_id'] ?? 0,
|
||||
'mepro_idarmazem' => $data['warehouse_id'] ?? 0,
|
||||
'mepro_nfantasia' => $product->pr_descricao, // Fixed: Product model doesn't have pr_nome
|
||||
'mepro_descricao' => $product->pr_descricao,
|
||||
'mepro_codigo' => $product->pr_codigo,
|
||||
'mepro_exp1' => $data['extra1'] ?? '',
|
||||
'mepro_exp2' => $data['extra2'] ?? '',
|
||||
'mepro_exp3' => $data['extra3'] ?? '',
|
||||
// Legacy required fields with default values
|
||||
'mepro_idhistorico' => 0,
|
||||
'mepro_idoc' => 0,
|
||||
'mepro_idcoc' => 0,
|
||||
'mepro_idcot' => 0,
|
||||
'mepro_pn' => '',
|
||||
'mepro_bp' => ''
|
||||
];
|
||||
|
||||
$movement = StockMovement::create($movementData);
|
||||
|
||||
Log::write('erpstock', 'Product Stock Movement', "Created movement ID: {$movement->mepro_id} with history: " . ($movementData['mepro_historico'] ?? 'NULL'));
|
||||
|
||||
DB::commit();
|
||||
return $movement;
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
Log::write('erpstock', 'Error', 'Failed to create movement: ' . $e->getMessage());
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Modules\Erprawmaterials\Models\RawMaterial;
|
||||
use Modules\ErpStock\Models\RawMaterialStockMovement;
|
||||
use Illuminate\Database\Capsule\Manager as DB;
|
||||
use App\Helpers\Log;
|
||||
|
||||
class RawMaterialStockMovementService
|
||||
{
|
||||
/**
|
||||
* Create a stock movement for a raw material.
|
||||
*
|
||||
* @param array $data Normalized data for the movement
|
||||
* @param object $user The current user
|
||||
* @return RawMaterialStockMovement
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function createMovement(array $data, $user)
|
||||
{
|
||||
// Validate required fields
|
||||
if (empty($data['mp_id'])) {
|
||||
throw new \Exception("Raw Material ID is required.");
|
||||
}
|
||||
|
||||
// Find the raw material
|
||||
$material = RawMaterial::where('mp_id', $data['mp_id'])
|
||||
->where('mp_idbus', $user->users_bus_id)
|
||||
->first();
|
||||
|
||||
if (!$material) {
|
||||
throw new \Exception("Raw Material not found.");
|
||||
}
|
||||
|
||||
$quantity = $data['quantity'] ?? 0;
|
||||
if ($quantity <= 0) {
|
||||
throw new \Exception("Invalid quantity: must be greater than zero.");
|
||||
}
|
||||
|
||||
$type = $data['type'] ?? 'E'; // E = Entry, S = Exit
|
||||
|
||||
// Prepare data for model
|
||||
$movementData = [
|
||||
'memp_idbus' => $user->users_bus_id,
|
||||
'memp_idmp' => $material->mp_id,
|
||||
'memp_data' => date('Y-m-d'),
|
||||
'memp_idoperador' => $user->users_id,
|
||||
'memp_tipoes' => $type,
|
||||
'memp_qtdade' => $quantity,
|
||||
'memp_historico' => $data['history'] ?? '',
|
||||
'memp_documento' => $data['document'] ?? '',
|
||||
'memp_lote' => $data['batch'] ?? '',
|
||||
'memp_custo' => $data['cost'] ?? 0,
|
||||
'memp_preco' => $data['price'] ?? 0,
|
||||
'memp_ipi' => $data['ipi'] ?? 0,
|
||||
'memp_icms' => $data['icms'] ?? 0,
|
||||
'memp_oimpostos' => $data['other_taxes'] ?? 0,
|
||||
'memp_obs' => $data['observation'] ?? '',
|
||||
'memp_codigo' => $material->mp_codigo,
|
||||
'memp_nome' => $material->mp_descricao,
|
||||
'memp_idfornecedor' => $data['supplier_id'] ?? 0,
|
||||
'memp_idcliente' => $data['customer_id'] ?? 0,
|
||||
'memp_idarmazem' => $data['warehouse_id'] ?? 0,
|
||||
];
|
||||
|
||||
// Begin transaction
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
// Create movement record using the ErpStock model which includes warehouse support
|
||||
$movement = RawMaterialStockMovement::create($movementData);
|
||||
|
||||
// Update raw material stock level
|
||||
if ($type === 'E') {
|
||||
$material->mp_estocado += $quantity;
|
||||
} else {
|
||||
$material->mp_estocado -= $quantity;
|
||||
}
|
||||
$material->save();
|
||||
|
||||
DB::commit();
|
||||
|
||||
Log::write("Movimentação de estoque ({$type}) para: {$material->mp_descricao} (Qtd: {$quantity})", 'erprawmaterials');
|
||||
|
||||
return $movement;
|
||||
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user