gsferro / powermodel
Forma elegante e eficiente de formatar campos de data, hora e afins ao exibir, colocando somente um sufixo no nome original do atributo sem precisar declarar Accessors e/ou Mutators dentro da model
README
Forma elegante e eficiente de formatar campos de data, hora e afins, colocando somente um sufixo no nome original do atributo sem precisar declarar Accessors e/ou Mutators dentro da model. Pode facilmente também exibir um somatório usando relacionamento, sem precisar declarar o Accessor, como visto no Uso avançado
Instalação
composer require gsferro/powermodel
-
Caso de algum Problema por conta da sua versão do php (<8.0.0), execute:
composer require gsferro/powermodel --ignore-platform-reqs
Configurar Model
- Na Model adicione a trait do pacote:
Use PowerModel;
Uso
# Para fins de demonstração
$model = Model::first();
-
Datas:
- formato de banco para BR
# original $model->created_at // 2021-12-16 12:00:00 # sufixo $model->created_at_fdh // sufixo '_fdh' => 16/12/2021 12:00:00 $model->created_at_dhi // sufixo '_dhi' => 16/12/2021 12:00 $model->created_at_fmt // sufixo '_fmt' => 16/12/2021 $model->created_at_fmr // sufixo '_fmr' => 12:00 $model->created_at_rar // sufixo '_rar' => 12:00:00
-
CPF | CNPJ:
_inc
- Verifica se o valor é um cpf ou cnpj e coloca a mascara de acordo
# original $model->cpf // 12345678900 # sufixo $model->cpf_inc // sufixo '_inc' => 123.456.789-00 # original $model->cnpj // 12345678901234 # sufixo $model->cnpj_inc // sufixo '_inc' => 12.345.678/9012-34 # original $model->cpf_cnpj // 12345678900 | 12345678901234 # sufixo $model->cpf_cnpj_inc // sufixo '_inc' => 123.456.789-00 | 12.345.678/9012-34
-
Valor Monetário:
_mbr
(float)# original $model->valor_unitario // 12345.67 # sufixo $model->valor_unitario_mbr // sufixo '_mbr' => 12.345,67
-
Valor Numerico:
_nbr
(int)# original $model->valor_numerico // 1234567 # sufixo $model->valor_numerico_nbr // sufixo '_nbr' => 1.234.567
-
Email Mascarado:
_msk
# TODO pegar a configuração da mascara do e-mail via config # original $model->email // "fulano@exemplo.com" # sufixo $model->email_msk // sufixo '_msk' => "f*****o@exemplo.com" # Caso o campo não seja um email valido, devolvera o valor original: $model->email // "fulano#exemplo.com" # sufixo $model->email_msk // sufixo '_msk' => "fulano#exemplo.com"
-
Ativo / Inativo:
_sai
- (bool)# original $model->status // "1" # sufixo $model->status_sai // sufixo '_sai' => "Ativo" # original $model->status // "0" # sufixo $model->status_sai // sufixo '_sai' => "inativo"
-
Sim / Não:
_ssn
- (bool)# original $model->status // "1" # sufixo $model->status_ssn // sufixo `_ssn' => "Sim" # original $model->status // "0" # sufixo $model->status_ssn // sufixo '_ssn' => "Não"
-
Habilitado / Desabilitado (enable/disabled):
_sed
- (bool)# original $model->status // "1" # sufixo $model->status_sed // sufixo `_sed' => "Habilitado" # original $model->status // "0" # sufixo $model->status_sed // sufixo '_sed' => "Desabilitado"
Uso Avançado
-
Sum:
<relationName>_sum_<collumn_name>
# Para fins de demonstração na Model vc tem um Accessors que faz a soma utilizando um relacionamento public function getSumValorTotalEstimadoAttribute(): string { return $this->itens()->sum('valor_total_estimado') ?? 0.00; } # Invocando $model = Model::first(); $model->sum_valor_total_estimado; // 123456.89 $model->sum_valor_total_estimado_mbr; // 1.234.567,89
- Ou você pode simplesmente fazer assim:
# Para fins de demonstração na Model vc tem um relacionamento chamado itens # Invocando $model = Model::first(); $model->itens_sum_valor_total_estimado; // 123456.89 # e ainda utilizar a formatação com o sufixo $model->itens_sum_valor_total_estimado_mbr; // 1.234.567,89
-
Count:
<relationName>_count_relation
# Para fins de demonstração na Model vc tem um Accessors que faz o count utilizando um relacionamento public function getCountItensEstimadoAttribute(): string { return $this->itens()->count() ?? 0; } # Invocando $model = Model::first(); $model->itens_count_relation; // 12345689 $model->itens_count_relation_nbr; // 123.456.789
- Ou você pode simplesmente fazer assim:
# Para fins de demonstração na Model vc tem um relacionamento chamado itens # Invocando $model = Model::first(); $model->itens_count_relation; // 12345689 # e ainda utilizar a formatação com o sufixo $model->count_itens_nbr; // 123.456.789
Appends
Caso queria ao invocar a model, já exibir o Accessor, basta colocado no append:
- Usando o exemplo do Uso avançado
- Sem append:
# Tinker >>> $model = Model::first() => { id: "1", created_at: "2021-12-10 15:19:20.697", updated_at: "2021-12-10 15:19:20.697", } $model->sum_valor_total_estimado; // 123456.89 $model->sum_valor_total_estimado_mbr; // 1.234.567,89
- Com append na model:
protected $appends = [ 'sum_valor_total_estimado', 'sum_valor_total_estimado_mbr', ]; # Tinker >>> $model = Model::first() => { id: "1", created_at: "2021-12-10 15:19:20.697", updated_at: "2021-12-10 15:19:20.697", +sum_valor_total_estimado: "123456.89", +sum_valor_total_estimado_mbr: "1.234.567,89", }
- Com append usando prefixo de relacionamento, sem precisar criar o Accessor:
protected $appends = [ 'sum_valor_total_estimado', 'sum_valor_total_estimado_mbr', 'itens_sum_valor_total_estimado', 'itens_sum_valor_total_estimado_mbr', ]; # Tinker >>> $model = Model::first() => { id: "1", created_at: "2021-12-10 15:19:20.697", updated_at: "2021-12-10 15:19:20.697", +sum_valor_total_estimado: "123456.89", +sum_valor_total_estimado_mbr: "1.234.567,89", +itens_sum_valor_total_estimado: "123456.89", +itens_sum_valor_total_estimado_mbr: "1.234.567,89", } ``` ### TODO 1. No getAttribute 1. Prefixo para soma campo em um relacionamento 1. IP 1. TelCel 1. Implementar para o setAtribute 1. No caso de empty, devolver um valor padrão que esteja dentro de uma config ao inves de somente "" ### Observações Gerais 1. Na versão do laravel 8.77 foi lançada uma nova abordagem para criar os Accessors e Mutators 1. Fique a vontade para enviar pull-request com mais formatações genéricas para facilitar o uso no dia-a-dia ### License - MIT License