Skip to content

Instantly share code, notes, and snippets.

@denoww
Last active June 25, 2016 17:20
Show Gist options
  • Save denoww/81dbfbb8dde8c78109e6b39f6e14c9c8 to your computer and use it in GitHub Desktop.
Save denoww/81dbfbb8dde8c78109e6b39f6e14c9c8 to your computer and use it in GitHub Desktop.

Refatorado status

https://github.com/denoww/seucondominio/commit/41b1f94cfad3a29e1d0ca4af91dff75cd683de6a

79 additions and 115 deletions.

Ficou um pouco mais organizado e com 36 linhas de código a menos

Observação: Mesmo que tenha ficado bugs eles serão corrigidos em cima de um padrão sustentável

Entenda os motivos da Refatoração

Objeto do STATUS de cobrança não foi construído da maneira correta, e não é sustentável

Objeto em questão está definido no model de forma incompleta

como está hoje

STATUS = {
  abertas: [
    { tipo: :em_dia, label: 'À Vencer', color: 'gray' },
    { tipo: :vencidas, label: 'Vencida', color: 'red' },
    { tipo: :juridicas, label: 'Jurídica', color: 'red-dark' },
  ],
  quitadas: [
    { tipo: :em_dia, label: 'Paga', color: 'green' },
    { tipo: :vencidas, label: 'Paga', color: 'green' },
    { tipo: :juridicas, label: 'Paga', color: 'green' },
  ],
  canceladas: [
    { tipo: :em_dia, label: 'Cancelada', color: 'yellow' },
    { tipo: :vencidas, label: 'Cancelada', color: 'yellow' },
    { tipo: :juridicas, label: 'Cancelada', color: 'yellow' },
  ]
}.freeze

Por ele estar incompleto, foi preciso REESCREVER ele no front sem necessidade No index_ctrl.coffe de cobranças dentro de $s.filtro existia uma definição pra status A definirição abaixo deveria ter vindo do backend, caso este estive sido definido corretamente (don't repeat your self)

...
status:
  items: [
    {
      key: 'quitadas'
      label: 'Quitadas'
      subitems: [
        { key: 'em_dia',    label: 'Em dia' }
        { key: 'vencidas',  label: 'Vencidas' }
        { key: 'juridicas', label: 'Jurídicas' }
      ]
    }
    {
      key: 'abertas'
      label: 'Abertas'
      subitems: [
        { key: 'em_dia',    label: 'Em dia' }
        { key: 'vencidas',  label: 'Vencidas' }
        { key: 'juridicas', label: 'Jurídicas' }
      ]
    }
    {
      key: 'canceladas'
      label: 'Canceladas'
      subitems: [
        { key: 'em_dia',    label: 'Em dia' }
        { key: 'vencidas',  label: 'Vencidas' }
        { key: 'juridicas', label: 'Jurídicas' }
      ]
    }
  ]
...

Agora por último, e mais grave problema $s.selections.toParams() e $s.settings estão com estrutura de dados incorreta, dificultando todas ações em massa futura que vamos implementar Esta estrutura de dados não representa a forma que organizamos os status no backend

Como está hoje

{
  "abertas_em_dia": [
      28,
      451,
      775,
      1228,
      1300
    ],
    "abertas_vencidas": [
      1, 2, 3, 4
    ],
    "abertas_juridicas": [],
    "quitadas_em_dia": [],
    "quitadas_vencidas": [],
    "quitadas_juridicas": [],
    "canceladas_em_dia": [
      328
    ],
    "canceladas_vencidas": [],
    "canceladas_juridicas": []
  }
}

Problema: se algum desenvolvedor precisar "capturar" as cobranças abertas no front-end como ele deveria fazer? Respostas: Com expressão regular, ou cadastrar uma outra lista no front, como foi feito no botão ações para esconder "gerar boletos"

A estrutura sustentável e mantível seria separar status e substatus

{
  abertas:    { em_dia: [...], vencidas: [], juridicas: [] },
  pagas:      { em_dia: [...], vencidas: [], juridicas: [] },
  canceladas: { em_dia: [...], vencidas: [], juridicas: [] },
}

Dessa forma é possível capturar qualquer coisa

$s.selections.toParams().abertas
$s.selections.toParams().abertas.em_dia

Modificado para nova realidade

  • Geração de Boletos
  • Back-End: get_selections_ids
  • Busca do ghosts
  • todos os lugares que utilizam o objeto no front $s.selections
  • todos lugares que utilizar a constante Cobranca::STATUS
  • Algoritimo que da hide/show nas ações em massa

Testado

  • Geração de boletos
    • Se a 'quantidade' nas abas estão corretas
    • se vai gerar quantidade corretas de boletos
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment