ApiEditDocument
extends ApiController
in package
uses
ApiBusinessDocumentTrait
Edita un documento de negocio existente (factura, albarán, pedido o presupuesto) en una sola llamada: modificación tanto el documento como las líneas, recalculando totales y manteniendo el stock consistente.
Table of Contents
Constants
- API_VERSION : mixed = 3
- INCIDENT_EXPIRATION_TIME : mixed = 600
- IP_LIST : mixed = 'api-ip-list'
- MAX_INCIDENT_COUNT : mixed = 5
Properties
Methods
- __construct() : mixed
- getPageData() : array<string|int, mixed>
- run() : void
- applyLineFields() : void
- Asigna a la línea los campos recibidos en el array de datos.
- checkCompany() : bool
- Comprueba que la empresa (idempresa) no se cambia, porque rompería la numeración, la contabilidad y el stock asociado al documento.
- checkSubject() : bool
- Comprueba que el sujeto (codcliente / codproveedor) no se cambia.
- checkWarehouse() : bool
- Comprueba que el almacén (codalmacen) no se cambia, porque descuadraría el stock de las líneas existentes.
- db() : DataBase
- editDocument() : bool
- editLockedDocument() : bool
- Edita un documento no editable: solo se permiten los campos desbloqueados (femail, idestado, idestado_ant, numdocs, pagada). Cualquier intento de modificar la cabecera o las líneas se rechaza con 422.
- getUriParam() : string
- loadModel() : bool
- processInvoicePaid() : void
- runResource() : void
- syncLines() : bool
- Sincroniza las líneas del documento (full sync): las líneas con idlinea existente se modifican, las que no traen idlinea se crean y las líneas existentes ausentes del payload se borran (revirtiendo el stock).
- toBool() : bool
- Convierte un valor a booleano.
- updateHeader() : bool
- Actualiza la cabecera del documento con los campos permitidos. No toca el sujeto ni el almacén (ya validados como inmutables), ni la clave primaria, la numeración (numero, codigo, codejercicio) ni el estado (idestado), que deben cambiarse por sus mecanismos propios y no por asignación directa.
Constants
API_VERSION
public
mixed
API_VERSION
= 3
INCIDENT_EXPIRATION_TIME
public
mixed
INCIDENT_EXPIRATION_TIME
= 600
IP_LIST
public
mixed
IP_LIST
= 'api-ip-list'
MAX_INCIDENT_COUNT
public
mixed
MAX_INCIDENT_COUNT
= 5
Properties
$apiKey
protected
ApiKey
$apiKey
$model
protected
string
$model
$request
protected
Request
$request
$response
protected
Response
$response
$url
protected
string
$url
Methods
__construct()
public
__construct(string $className[, string $url = '' ]) : mixed
Parameters
- $className : string
- $url : string = ''
getPageData()
public
getPageData() : array<string|int, mixed>
Return values
array<string|int, mixed>run()
public
run() : void
applyLineFields()
Asigna a la línea los campos recibidos en el array de datos.
protected
applyLineFields(BusinessDocumentLine &$line, array<string|int, mixed> $data, bool $isNew) : void
Si un campo no viene en los datos se conserva el valor actual de la línea, salvo la cantidad, que en una línea nueva ($isNew) toma 1 por defecto.
Parameters
- $line : BusinessDocumentLine
- $data : array<string|int, mixed>
- $isNew : bool
checkCompany()
Comprueba que la empresa (idempresa) no se cambia, porque rompería la numeración, la contabilidad y el stock asociado al documento.
protected
checkCompany(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
boolcheckSubject()
Comprueba que el sujeto (codcliente / codproveedor) no se cambia.
protected
checkSubject(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
boolcheckWarehouse()
Comprueba que el almacén (codalmacen) no se cambia, porque descuadraría el stock de las líneas existentes.
protected
checkWarehouse(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
booldb()
protected
db() : DataBase
Return values
DataBaseeditDocument()
protected
editDocument(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
booleditLockedDocument()
Edita un documento no editable: solo se permiten los campos desbloqueados (femail, idestado, idestado_ant, numdocs, pagada). Cualquier intento de modificar la cabecera o las líneas se rechaza con 422.
protected
editLockedDocument(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
boolgetUriParam()
protected
getUriParam(string $num) : string
Parameters
- $num : string
Return values
stringloadModel()
protected
loadModel() : bool
Return values
boolprocessInvoicePaid()
protected
processInvoicePaid(BusinessDocument &$doc) : void
Parameters
- $doc : BusinessDocument
runResource()
protected
runResource() : void
syncLines()
Sincroniza las líneas del documento (full sync): las líneas con idlinea existente se modifican, las que no traen idlinea se crean y las líneas existentes ausentes del payload se borran (revirtiendo el stock).
protected
syncLines(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument
Return values
booltoBool()
Convierte un valor a booleano.
protected
toBool(mixed $value) : bool
Acepta: true, false, 1, 0, "1", "0", "true", "false"
Parameters
- $value : mixed
Return values
boolupdateHeader()
Actualiza la cabecera del documento con los campos permitidos. No toca el sujeto ni el almacén (ya validados como inmutables), ni la clave primaria, la numeración (numero, codigo, codejercicio) ni el estado (idestado), que deben cambiarse por sus mecanismos propios y no por asignación directa.
protected
updateHeader(BusinessDocument &$doc) : bool
Parameters
- $doc : BusinessDocument