PHPackages                             lungosoft/document - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. lungosoft/document

ActiveLibrary[Database &amp; ORM](/categories/database)

lungosoft/document
==================

Document for documents with header and lines structure, validating lines and header information, saving data on database.

1.1.4(6y ago)032MITPHPPHP &gt;=7.0.0

Since Jul 10Pushed 6y ago1 watchersCompare

[ Source](https://github.com/LungoSoft/document)[ Packagist](https://packagist.org/packages/lungosoft/document)[ RSS](/packages/lungosoft-document/feed)WikiDiscussions master Synced 3d ago

READMEChangelogDependencies (5)Versions (8)Used By (0)

Document Control
================

[](#document-control)

Introducción
------------

[](#introducción)

Un Documento es todo aquel que tiene dos tablas, una tabla cabecera y una tabla lineas, relacionado 1 a N, donde la llave foranea se encuentra en las líneas, es decir, una cabecera con multiple líneas.

Nos proporciona un mecanismo para manejar estados de Abierto, Cerrado y Parciamente Cerrado (este último solo en líneas), dando la posibilidad de editar solo en estatus de abierto.

Nos ayuda a relacionar 2 documentos mediante llave foranea. Un documento relaciona alguna de sus líneas con una línea en otro documento, una relación 1 a 1.

[![](https://camo.githubusercontent.com/576785de26dcdf4fb735ba5d194ed04d453c226a72b866442b0eb55b7a3fb58f/687474703a2f2f6c756e676f736f66742e636f6d2f696d616765732f7265706f732f646f63756d656e742f646f63756d656e745f7461626c65735f312e706e67)](https://camo.githubusercontent.com/576785de26dcdf4fb735ba5d194ed04d453c226a72b866442b0eb55b7a3fb58f/687474703a2f2f6c756e676f736f66742e636f6d2f696d616765732f7265706f732f646f63756d656e742f646f63756d656e745f7461626c65735f312e706e67)

En la imagen anterior vemos un ejemplo de dos documentos con sus relaciones

***¿En qué nos beneficia esta estructura?***

Nos ayuda a poder hacer crud de documentos de manera segura y reduciendo validaciones de estatus de documentos al crear, edtiar y eliminar. En ocaciones, se requiere crear una cadena de documentos mucho más grande y estricta, reducimos el crud en una clase que controle estos cambios y sus cambios de estatus.

***¿Por que la redundancia de datos?***

Como se mencionó antes, a veces se requiere una línea de documentos más larga y más compleja. Un ejemplo de esto es una aplicación empresarial tipo ERP que controle documentos de compras, almacen y facturación.

[![](https://camo.githubusercontent.com/75d110055a347473433b5edaa71dfae98bee11f6a44ce1dbe84187ceb07a1ff1/687474703a2f2f6c756e676f736f66742e636f6d2f696d616765732f7265706f732f646f63756d656e742f646f63756d656e745f7461626c65735f322e706e67)](https://camo.githubusercontent.com/75d110055a347473433b5edaa71dfae98bee11f6a44ce1dbe84187ceb07a1ff1/687474703a2f2f6c756e676f736f66742e636f6d2f696d616765732f7265706f732f646f63756d656e742f646f63756d656e745f7461626c65735f322e706e67)

La redundancia de datos nos ayuda a que podamos simplificar las consultas y sean más rápidas (reduciendo la cantidad de JOINs a otros documentos para obtener la información).

Es por ello que debemos controlar la duplicación de datos de manera efectiva.

***Control de cantidades***

Podemos controlar las cantidades al momento de editar un documento, es decir, supongamos que creamos un documento "Orden de Compra" y le damos entrada a una de sus líneas mediante un documento "Entrada" por una cantidad menor a la que dice el documento "Orden de Compra", podemos editar la cantidad del documento "Orden de Compra" siempre y cuando la cantidad no sobrepase a la que tiene el documento "Entrada".

***Columnas de las tablas***

Todas las tablas deben tener por fuerza una de estatus (status). Para las líneas, adicional a estatus (status), una columna de cantidad (quantity). Los estados de los documentos son 'Abierto', 'Cerrado' y 'Parcialmente Cerrado'. Los valore mencionados anteriormente (status, quantity, Abierto, Cerrado y Parcialmente Cerradp) son los default, pero pueden ser cambiados modificando las propiedades del documento.

Requisitos
----------

[](#requisitos)

- Crear modelo: Crear el modelo Eloquent
- Mass Assignment: Habilitar en los modelos la asignación masiva.
- Relación One to Many: La cabecera debe tener el método `lines` con la relación al modelo líneas.

```
class Order extends Model
{
    protected $fillable = ['customer', 'status'];

    public function lines()
    {
        return $this->hasMany(OrderDetail::class);
    }
}

```

Instalación
-----------

[](#instalación)

> `composer install "lungosoft/document"`

Uso
---

[](#uso)

### Document

[](#document)

Hay que crear una clase por documento que herede de `Document` y sobreescribimos 2 propiedades, una para la clase cabecera (`\$headerClass`) y otra la clase de las lineas (`\$lineClass`).

```
