Preserva B1 aceite de confirmacao interna sem validade fiscal
This commit is contained in:
@@ -55,6 +55,10 @@ final class ServiceWorkflow
|
||||
$result = (array) $row;
|
||||
$result['data'] = json_decode($row->data, true, 32, JSON_THROW_ON_ERROR);
|
||||
$result['version'] = (int) $row->version;
|
||||
if ($area === 'billing_drafts') {
|
||||
$confirmationId = DB::table('b_internal_confirmations')->where('billing_draft_id', $row->id)->value('id');
|
||||
$result['internal_confirmation'] = $confirmationId ? ['reference' => 'INT-B1-'.$confirmationId, 'label' => InternalConfirmation::LABEL] : null;
|
||||
}
|
||||
$result['base_amount'] = ServicePermissions::unitScoped($area) ? DraftValues::base($result['data']) : null;
|
||||
$history = DB::table('a_history')->where('area', $area)->where('record_id', $row->id)->where('version', $row->version)->value('id');
|
||||
$result['pending'] = $history ? DB::table('a_pending')->where('history_id', $history)->pluck('message', 'code')->all() : [];
|
||||
@@ -80,6 +84,7 @@ final class ServiceWorkflow
|
||||
$old = $id ? $this->query($area, $scope)->where('id', $id)->first() : null;
|
||||
if ($id) {
|
||||
abort_unless($old, 403, 'Registo fora do âmbito autorizado.');
|
||||
abort_if($area === 'billing_drafts' && DB::table('b_internal_confirmations')->where('billing_draft_id', $id)->exists(), 409, 'Confirmado internamente — sem validade fiscal. O registo está bloqueado para edição.');
|
||||
abort_unless((int) $old->version === (int) ($input['version'] ?? 0), 409, 'O registo mudou. Reabra-o antes de guardar.');
|
||||
}
|
||||
$version = $old ? (int) $old->version + 1 : 1;
|
||||
@@ -102,6 +107,7 @@ final class ServiceWorkflow
|
||||
$affected = [];
|
||||
if ($area === 'service_drafts' && $old) {
|
||||
foreach (DB::table('a_billing_drafts')->where('source_id', $id)->where('tenant_id', $scope['tenant_id'])->where('company_id', $scope['company_id'])->where('unit_id', $scope['unit_id'])->get(['id','version']) as $billing) {
|
||||
if (DB::table('b_internal_confirmations')->where('billing_draft_id', $billing->id)->exists()) { continue; }
|
||||
$billingHistory = DB::table('a_history')->where('area', 'billing_drafts')->where('record_id', $billing->id)->where('version', $billing->version)->value('id');
|
||||
DB::table('a_pending')->insertOrIgnore(['history_id' => $billingHistory, 'code' => 'source_changed', 'message' => 'A prestação de origem foi alterada; os dados deste rascunho não foram reescritos.', 'created_at' => now()]);
|
||||
$affected[] = $billing->id;
|
||||
|
||||
Reference in New Issue
Block a user