primeira versão
This commit is contained in:
200
views/crianca_view.xml
Normal file
200
views/crianca_view.xml
Normal file
@@ -0,0 +1,200 @@
|
||||
<odoo>
|
||||
<!-- KANBAN -->
|
||||
<record id="view_recreacao_crianca_kanban" model="ir.ui.view">
|
||||
<field name="name">recreacao.crianca.kanban</field>
|
||||
<field name="model">recreacao.crianca</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="foto"/>
|
||||
<field name="status_dia"/>
|
||||
<field name="tem_alergia"/>
|
||||
<field name="plano_id"/>
|
||||
<field name="idade"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_kanban_global_click o_kanban_record_has_image_fill o_res_partner_kanban">
|
||||
<!-- Foto -->
|
||||
<t t-if="record.foto.raw_value">
|
||||
<div class="o_kanban_image">
|
||||
<img t-att-src="kanban_image('recreacao.crianca', 'foto', record.id.raw_value)" alt="Foto"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div class="o_kanban_image">
|
||||
<img alt="Sem Foto" src="/base/static/img/avatar_grey.png"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<div class="oe_kanban_details">
|
||||
<div class="o_kanban_record_top">
|
||||
<div class="o_kanban_record_headings">
|
||||
<strong class="o_kanban_record_title"><field name="name"/></strong>
|
||||
</div>
|
||||
<div class="o_dropdown_kanban dropdown">
|
||||
<a class="dropdown-toggle o-no-caret btn" role="button" data-bs-toggle="dropdown" href="#" aria-label="Dropdown">
|
||||
<span class="fa fa-ellipsis-v"/>
|
||||
</a>
|
||||
<div class="dropdown-menu" role="menu">
|
||||
<a role="menuitem" type="edit" class="dropdown-item">Editar</a>
|
||||
<a role="menuitem" type="object" name="action_abrir_historico" class="dropdown-item">Ver Diário</a>
|
||||
<!-- CORRIGIDO AQUI: Nome da nova função -->
|
||||
<a role="menuitem" type="object" name="action_gerar_cobranca" class="dropdown-item">Gerar Cobrança</a>
|
||||
<a role="menuitem" type="delete" class="dropdown-item text-danger">Excluir</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul>
|
||||
<li><span class="text-muted"><field name="idade"/></span></li>
|
||||
<li><span class="badge text-bg-light"><field name="plano_id"/></span></li>
|
||||
<li t-if="record.tem_alergia.raw_value">
|
||||
<span class="badge text-bg-danger">⚠️ ALÉRGICO</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="o_kanban_record_bottom" style="margin-top: 8px;">
|
||||
<div class="oe_kanban_bottom_left">
|
||||
<button name="action_abrir_whatsapp" type="object" class="btn btn-sm btn-outline-success" style="border-radius: 50%; width: 32px; height: 32px; padding: 0;">
|
||||
<i class="fa fa-whatsapp" style="font-size: 18px;"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_kanban_bottom_right">
|
||||
<t t-if="record.status_dia.raw_value == 'ausente'">
|
||||
<button name="action_marcar_entrada" type="object" class="btn btn-primary btn-sm">
|
||||
<i class="fa fa-sign-in"/> Entrada
|
||||
</button>
|
||||
</t>
|
||||
<t t-if="record.status_dia.raw_value == 'presente'">
|
||||
<button name="action_marcar_saida" type="object" class="btn btn-danger btn-sm">
|
||||
<i class="fa fa-sign-out"/> Saída
|
||||
</button>
|
||||
</t>
|
||||
<t t-if="record.status_dia.raw_value == 'finalizado'">
|
||||
<span class="badge rounded-pill text-bg-secondary">
|
||||
<i class="fa fa-home"/> JÁ SAIU
|
||||
</span>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- LISTA GERAL -->
|
||||
<record id="view_recreacao_crianca_tree" model="ir.ui.view">
|
||||
<field name="name">recreacao.crianca.tree</field>
|
||||
<field name="model">recreacao.crianca</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="idade"/>
|
||||
<field name="responsavel_financeiro_id"/>
|
||||
<field name="plano_id"/>
|
||||
<field name="status_dia" widget="badge"
|
||||
decoration-success="status_dia == 'presente'"
|
||||
decoration-muted="status_dia == 'finalizado'"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- FORMULÁRIO -->
|
||||
<record id="view_recreacao_crianca_form" model="ir.ui.view">
|
||||
<field name="name">recreacao.crianca.form</field>
|
||||
<field name="model">recreacao.crianca</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button name="action_marcar_entrada" string="Registrar Entrada" type="object" class="oe_highlight" invisible="status_dia != 'ausente'"/>
|
||||
<button name="action_marcar_saida" string="Registrar Saída" type="object" class="btn-danger" invisible="status_dia != 'presente'"/>
|
||||
|
||||
<!-- CORRIGIDO AQUI: Botão novo -->
|
||||
<button name="action_gerar_cobranca" string="Gerar Cobrança" type="object" class="btn-primary"/>
|
||||
|
||||
<field name="status_dia" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<field name="foto" widget="image" class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
<h1><field name="name" placeholder="Nome da Criança"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group string="Filiação">
|
||||
<field name="mae_id" context="{'default_is_company': False}"/>
|
||||
<field name="pai_id" context="{'default_is_company': False}"/>
|
||||
<field name="responsavel_financeiro_id"/>
|
||||
</group>
|
||||
<group string="Plano">
|
||||
<field name="plano_id"/>
|
||||
<field name="valor_plano"/>
|
||||
<field name="data_nascimento"/>
|
||||
<field name="idade"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<div class="alert alert-danger" role="alert" invisible="not tem_alergia and not toma_remedio">
|
||||
<strong>ATENÇÃO:</strong> Criança com restrições médicas!
|
||||
</div>
|
||||
|
||||
<notebook>
|
||||
<page string="🏥 Saúde">
|
||||
<group>
|
||||
<group>
|
||||
<field name="tem_alergia"/>
|
||||
<field name="alergias" invisible="not tem_alergia"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="toma_remedio"/>
|
||||
<field name="medicamentos" invisible="not toma_remedio"/>
|
||||
<field name="horario_medicacao" invisible="not toma_remedio"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="observacoes_saude"/>
|
||||
</page>
|
||||
|
||||
<page string="Histórico / Diário">
|
||||
<field name="diario_ids">
|
||||
<tree editable="bottom" default_order="data desc, create_date desc"
|
||||
decoration-success="tipo=='entrada'"
|
||||
decoration-danger="tipo=='saida'">
|
||||
<field name="data"/>
|
||||
<field name="hora_registro"/>
|
||||
<field name="tipo"/>
|
||||
<field name="descricao"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
||||
<!-- NOVO: Aba Financeiro -->
|
||||
<page string="💲 Financeiro">
|
||||
<field name="financeiro_ids" readonly="1">
|
||||
<tree decoration-success="status=='pago'" decoration-danger="status=='pendente'">
|
||||
<field name="data_vencimento"/>
|
||||
<field name="name"/>
|
||||
<field name="valor"/>
|
||||
<field name="status" widget="badge"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
|
||||
</notebook>
|
||||
</sheet>
|
||||
<!-- CHATTER (Rodapé para mensagens) -->
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_recreacao_crianca" model="ir.actions.act_window">
|
||||
<field name="name">Alunos</field>
|
||||
<field name="res_model">recreacao.crianca</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
</record>
|
||||
<menuitem id="menu_recreacao_crianca" name="Painel de Alunos" parent="menu_recreacao_root" action="action_recreacao_crianca" sequence="1"/>
|
||||
</odoo>
|
||||
50
views/diario_view.xml
Normal file
50
views/diario_view.xml
Normal file
@@ -0,0 +1,50 @@
|
||||
<odoo>
|
||||
<!-- LISTA GERAL DO DIÁRIO -->
|
||||
<record id="view_recreacao_diario_tree" model="ir.ui.view">
|
||||
<field name="name">recreacao.diario.tree</field>
|
||||
<field name="model">recreacao.diario</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Diário de Classe"
|
||||
decoration-success="tipo=='entrada'"
|
||||
decoration-danger="tipo=='saida'"
|
||||
decoration-warning="tipo=='ocorrencia'">
|
||||
<field name="data"/>
|
||||
<field name="hora_registro"/> <!-- Novo -->
|
||||
<field name="crianca_id"/>
|
||||
<field name="tipo" widget="badge"/>
|
||||
<field name="descricao"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- FORMULÁRIO DO DIÁRIO -->
|
||||
<record id="view_recreacao_diario_form" model="ir.ui.view">
|
||||
<field name="name">recreacao.diario.form</field>
|
||||
<field name="model">recreacao.diario</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="data"/>
|
||||
<field name="hora_registro"/>
|
||||
<field name="crianca_id" options="{'no_create': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="tipo"/>
|
||||
</group>
|
||||
</group>
|
||||
<field name="descricao" placeholder="Descreva o que aconteceu..."/>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_recreacao_diario" model="ir.actions.act_window">
|
||||
<field name="name">Diário Geral</field>
|
||||
<field name="res_model">recreacao.diario</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_recreacao_diario" name="Diário Geral" parent="menu_recreacao_root" action="action_recreacao_diario" sequence="10"/>
|
||||
</odoo>
|
||||
118
views/financeiro_view.xml
Normal file
118
views/financeiro_view.xml
Normal file
@@ -0,0 +1,118 @@
|
||||
<odoo>
|
||||
<record id="view_recreacao_financeiro_tree" model="ir.ui.view">
|
||||
<field name="name">recreacao.financeiro.tree</field>
|
||||
<field name="model">recreacao.financeiro</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom"
|
||||
decoration-success="tipo=='receita'"
|
||||
decoration-danger="tipo=='despesa'"
|
||||
decoration-muted="status=='cancelado'"
|
||||
limit="15">
|
||||
|
||||
<field name="data_vencimento" decoration-bf="1"/>
|
||||
|
||||
<field name="name" placeholder="Ex: Mensalidade João"/>
|
||||
|
||||
<field name="forma_pagamento"
|
||||
decoration-info="forma_pagamento == 'pix'"
|
||||
decoration-success="forma_pagamento == 'dinheiro'"
|
||||
decoration-warning="forma_pagamento == 'cartao'"
|
||||
decoration-bf="1"
|
||||
optional="show"/>
|
||||
|
||||
<field name="tipo"
|
||||
decoration-success="tipo=='receita'"
|
||||
decoration-danger="tipo=='despesa'"
|
||||
decoration-bf="1"/>
|
||||
|
||||
<field name="partner_id" widget="res_partner_many2one" optional="show"/>
|
||||
|
||||
<field name="crianca_id" optional="hide"/>
|
||||
|
||||
<field name="valor" sum="Total do Período" decoration-bf="1"/>
|
||||
|
||||
<field name="status" widget="badge"
|
||||
decoration-success="status=='pago'"
|
||||
decoration-warning="status=='pendente'"
|
||||
readonly="1"/>
|
||||
|
||||
<button name="action_pagar"
|
||||
string=" "
|
||||
type="object"
|
||||
icon="fa-check"
|
||||
title="Confirmar Pagamento"
|
||||
class="btn-success"
|
||||
invisible="status != 'pendente'"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_recreacao_financeiro_graph" model="ir.ui.view">
|
||||
<field name="name">recreacao.financeiro.graph</field>
|
||||
<field name="model">recreacao.financeiro</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph string="Fluxo de Caixa" type="bar" stacked="True">
|
||||
<field name="data_vencimento" type="row" interval="month"/>
|
||||
<field name="tipo" type="col"/>
|
||||
<field name="valor" type="measure"/>
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_recreacao_financeiro_search" model="ir.ui.view">
|
||||
<field name="name">recreacao.financeiro.search</field>
|
||||
<field name="model">recreacao.financeiro</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="crianca_id"/>
|
||||
|
||||
<filter string="Entradas (Receitas)" name="filter_receitas" domain="[('tipo','=','receita')]"/>
|
||||
<filter string="Saídas (Despesas)" name="filter_despesas" domain="[('tipo','=','despesa')]"/>
|
||||
<separator/>
|
||||
<filter string="Pendentes" name="filter_pendentes" domain="[('status','=','pendente')]"/>
|
||||
<filter string="Pagos" name="filter_pagos" domain="[('status','=','pago')]"/>
|
||||
|
||||
<separator/>
|
||||
<filter string="PIX" name="filter_pix" domain="[('forma_pagamento','=','pix')]"/>
|
||||
<filter string="Dinheiro" name="filter_dinheiro" domain="[('forma_pagamento','=','dinheiro')]"/>
|
||||
|
||||
<group expand="1" string="Agrupar Por">
|
||||
<filter string="Mês" name="group_month" context="{'group_by':'data_vencimento:month'}"/>
|
||||
<filter string="Tipo" name="group_tipo" context="{'group_by':'tipo'}"/>
|
||||
<filter string="Status" name="group_status" context="{'group_by':'status'}"/>
|
||||
<filter string="Forma de Pagto" name="group_pagto" context="{'group_by':'forma_pagamento'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_recreacao_financeiro" model="ir.actions.act_window">
|
||||
<field name="name">Movimentações Financeiras</field>
|
||||
<field name="res_model">recreacao.financeiro</field>
|
||||
<field name="view_mode">tree,graph,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Gerencie aqui o caixa da recreação.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_recreacao_financeiro_root"
|
||||
name="Financeiro"
|
||||
parent="menu_recreacao_root"
|
||||
sequence="10"/>
|
||||
|
||||
<menuitem id="menu_recreacao_financeiro_movimentos"
|
||||
name="Movimentações (Caixa)"
|
||||
parent="menu_recreacao_financeiro_root"
|
||||
action="action_recreacao_financeiro"
|
||||
sequence="1"/>
|
||||
|
||||
<menuitem id="menu_recreacao_relatorio_mensal_pdf"
|
||||
name="Imprimir Fluxo (PDF)"
|
||||
parent="menu_recreacao_financeiro_root"
|
||||
action="action_recreacao_financeiro_wizard"
|
||||
sequence="2"/>
|
||||
</odoo>
|
||||
40
views/financeiro_wizard_view.xml
Normal file
40
views/financeiro_wizard_view.xml
Normal file
@@ -0,0 +1,40 @@
|
||||
<odoo>
|
||||
<record id="view_recreacao_financeiro_wizard_form" model="ir.ui.view">
|
||||
<field name="name">recreacao.financeiro.wizard.form</field>
|
||||
<field name="model">recreacao.financeiro.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Relatório Financeiro Mensal">
|
||||
<group>
|
||||
<group>
|
||||
<field name="data_inicio"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="data_fim"/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button name="action_gerar_pdf" string="Imprimir PDF" type="object" class="btn-primary"/>
|
||||
<button string="Cancelar" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_recreacao_financeiro_wizard" model="ir.actions.act_window">
|
||||
<field name="name">Relatório Mensal</field>
|
||||
<field name="res_model">recreacao.financeiro.wizard</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
<!-- Adiciona o botão no menu Financeiro -->
|
||||
<menuitem id="menu_recreacao_relatorio"
|
||||
name="Relatórios"
|
||||
parent="menu_recreacao_root"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem id="menu_recreacao_relatorio_mensal"
|
||||
name="Fluxo de Caixa (PDF)"
|
||||
parent="menu_recreacao_relatorio"
|
||||
action="action_recreacao_financeiro_wizard"/>
|
||||
</odoo>
|
||||
25
views/plano_view.xml
Normal file
25
views/plano_view.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<odoo>
|
||||
<record id="view_recreacao_plano_tree" model="ir.ui.view">
|
||||
<field name="name">recreacao.plano.tree</field>
|
||||
<field name="model">recreacao.plano</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom">
|
||||
<field name="name"/>
|
||||
<field name="tipo_cobranca"/> <!-- Campo Novo -->
|
||||
<field name="valor"/>
|
||||
<field name="horario_inicio" widget="float_time"/>
|
||||
<field name="horario_fim" widget="float_time"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_recreacao_plano" model="ir.actions.act_window">
|
||||
<field name="name">Planos e Preços</field>
|
||||
<field name="res_model">recreacao.plano</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_recreacao_root" name="Recreação" web_icon="contacts,static/description/icon.png"/>
|
||||
<menuitem id="menu_recreacao_config" name="Configurações" parent="menu_recreacao_root" sequence="100"/>
|
||||
<menuitem id="menu_recreacao_plano" name="Planos" parent="menu_recreacao_config" action="action_recreacao_plano"/>
|
||||
</odoo>
|
||||
20
views/res_partner_view.xml
Normal file
20
views/res_partner_view.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<odoo>
|
||||
<record id="view_partner_form_recreacao" model="ir.ui.view">
|
||||
<field name="name">res.partner.form.recreacao</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<notebook position="inside">
|
||||
<page string="Filhos na Recreação">
|
||||
<field name="crianca_ids">
|
||||
<tree>
|
||||
<field name="name"/>
|
||||
<field name="plano_id"/>
|
||||
<field name="idade"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
15
views/web_layout.xml
Normal file
15
views/web_layout.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<odoo>
|
||||
<template id="custom_favicon_backend" inherit_id="web.layout" name="Custom Favicon & Manifest">
|
||||
<xpath expr="//head" position="inside">
|
||||
<!-- Ícones de navegador -->
|
||||
<link rel="shortcut icon" href="/plugin_recre/static/img/favicon.ico" type="image/x-icon"/>
|
||||
<link rel="icon" href="/plugin_recre/static/img/favicon.ico" type="image/x-icon"/>
|
||||
|
||||
<!-- O SEGREDO DO ANDROID: Link para o nosso JSON -->
|
||||
<link rel="manifest" href="/plugin_recre/static/manifest.json"/>
|
||||
|
||||
<!-- Meta tag para pintar a barra do navegador do celular -->
|
||||
<meta name="theme-color" content="#714B67"/>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user