network_partner

This commit is contained in:
santiky 2022-03-24 09:01:17 +01:00
parent cf798a996b
commit d2ac963ee1
Signed by: snt
GPG key ID: A9FD34930EADBE71
15 changed files with 437 additions and 1 deletions

3
.gitignore vendored
View file

@ -4,7 +4,8 @@ __pycache__/
*.py[cod] *.py[cod]
*$py.class *$py.class
*.py~ *.py~
*.xml~
*~
# C extensions # C extensions
*.so *.so

View file

@ -0,0 +1 @@
from . import models

View file

@ -0,0 +1,35 @@
{
'name': "Network Partner",
'summary': "Makes networks based in nodes of Partners.",
'description': """
Network partners
==================================================
Introduce el concepto de "nodo" y "red" en contactos asociados.
No proporciona funcionalidad por mismo, se usará luego en otros módulos.
- Modelo network
- Modelo nodo
- Añade campos node_id, is_node a res.partner
- Reglas de seguridad y access lists
""",
'author': 'Criptomart',
'website': "https://criptomart.net",
'category': 'Contacts',
'version': '12.0.1.0',
'license': 'AGPL-3',
'depends': ['base'],
'data': [
'views/res_partner_views.xml',
'views/partner_node_views.xml',
'views/partner_net_views.xml',
'security/network_partner_security.xml',
'security/ir.model.access.csv',
'views/actions.xml',
'views/menus.xml',
],
'demo': [],
'installable': True,
'auto_install': False,
'application': False,
}

View file

@ -0,0 +1,4 @@
from . import res_partner
from . import partner_node
from . import partner_network

View file

@ -0,0 +1,19 @@
#import logging
from odoo import models, fields, api
#_logger = logging.getLogger(__name__)
class PartnerNetwork(models.Model):
_name = 'partner.network'
#_inherit = 'mail.thread'
_description = 'A network of nodes.'
name = fields.Char(string="Nombre", help="El nombre de la red.")
#Fields
#network_partner_id = fields.Many2one('res.partner', required=True, ondelete='restrict')
#'groups_id': fields.many2many('res.groups', 'res_groups_users_rel', 'uid', 'gid', 'Groups'),
#member_id = fields.Many2many('res.partner', 'res_partner_network_rel', 'uid', 'nid', "Partners" )

View file

@ -0,0 +1,79 @@
#import logging
from odoo import models, fields, api
#_logger = logging.getLogger(__name__)
class PartnerNode(models.Model):
_name = 'partner.node'
_inherit = 'res.partner'
_description = 'A node of partners in a network'
network_id = fields.Many2one('network.partner', string="Red", help="La red a la que pertenece el nodo.")
partner_ids = fields.One2many('res.partner', 'node_id', string='Contactos del nodo', help='Los contactos asociados a éste nodo.')
"""
name = fields.Char(related='partner_id.name', string='Node Name', required=True, store=True, readonly=False)
partner_id = fields.Many2one('res.partner',
string="Contacto asociado",
help="El contacto asociado del nodo con sus datos como la dirección",
required=True
)
#street = fields.Char(compute='_compute_address', inverse='_inverse_street')
#street2 = fields.Char(compute='_compute_address', inverse='_inverse_street2')
#zip = fields.Char(compute='_compute_address', inverse='_inverse_zip')
#city = fields.Char(compute='_compute_address', inverse='_inverse_city')
#state_id = fields.Many2one('res.country.state', compute='_compute_address', inverse='_inverse_state', string="Fed. State")
#country_id = fields.Many2one('res.country', compute='_compute_address', inverse='_inverse_country', string="Country")
street = fields.Char(related='partner_id.street', store=True, readonly=False)
street2 = fields.Char(related='partner_id.street2', store=True, readonly=False)
zip = fields.Char(related='partner_id.zip', store=True, readonly=False)
city = fields.Char(related='partner_id.city', store=True, readonly=False)
#state_id = fields.Char(related='partner_id.state_id', store=True, readonly=False)
#country_id = fields.Char(related='partner_id.country_id', store=True, readonly=False)
email = fields.Char(related='partner_id.email', store=True, readonly=False)
phone = fields.Char(related='partner_id.phone', store=True, readonly=False)
def _get_company_address_fields(self, partner):
return {
'street' : partner.street,
'street2' : partner.street2,
'city' : partner.city,
'zip' : partner.zip,
'state_id' : partner.state_id,
'country_id' : partner.country_id,
}
def _compute_address(self):
for node in self.filtered(lambda node: node.partner_id):
address_data = node.partner_id.sudo().address_get(adr_pref=['contact'])
if address_data['contact']:
partner = node.partner_id.browse(address_data['contact']).sudo()
node.update(node._get_company_address_fields(partner))
def _inverse_street(self):
for company in self:
company.partner_id.street = company.street
def _inverse_street2(self):
for company in self:
company.partner_id.street2 = company.street2
def _inverse_zip(self):
for company in self:
company.partner_id.zip = company.zip
def _inverse_city(self):
for company in self:
company.partner_id.city = company.city
def _inverse_state(self):
for company in self:
company.partner_id.state_id = company.state_id
def _inverse_country(self):
for company in self:
company.partner_id.country_id = company.country_id
"""

View file

@ -0,0 +1,14 @@
#import logging
from odoo import models, fields, api
#_logger = logging.getLogger(__name__)
class ResPartner(models.Model):
_inherit = 'res.partner'
#'users': fields.many2many('res.users', 'res_groups_users_rel', 'gid', 'uid', 'Users'),
node_id = fields.Many2one('partner.node', string="Nodo")
is_node = fields.Boolean(string="Es un nodo", help="Éste partner representa un nodo en una red.")

View file

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_network_partner_node_group_user,network.partner.node.user,network_partner.model_partner_node,network_partner.group_np_user,1,0,0,0
access_network_partner_node_group_manager,network.partner.node.manager,network_partner.model_partner_node,network_partner.group_np_manager,1,1,1,1
access_network_partner_net_group_user,network.partner.net.user,network_partner.model_partner_network,network_partner.group_np_user,1,0,0,0
access_network_partner_net_group_manager,network.partner.net.manager,network_partner.model_partner_network,network_partner.group_np_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_network_partner_node_group_user network.partner.node.user network_partner.model_partner_node network_partner.group_np_user 1 0 0 0
3 access_network_partner_node_group_manager network.partner.node.manager network_partner.model_partner_node network_partner.group_np_manager 1 1 1 1
4 access_network_partner_net_group_user network.partner.net.user network_partner.model_partner_network network_partner.group_np_user 1 0 0 0
5 access_network_partner_net_group_manager network.partner.net.manager network_partner.model_partner_network network_partner.group_np_manager 1 1 1 1

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record model="ir.module.category" id="module_management">
<field name="name">Network Partner module access</field>
<field name="description">User access level for this module</field>
<field name="sequence">3</field>
</record>
<record id="group_np_user" model="res.groups">
<field name="name">User</field>
<field name="category_id" ref="network_partner.module_management"/>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
</record>
<record id="group_np_manager" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="network_partner.module_management"/>
<field name="implied_ids" eval="[(4, ref('network_partner.group_np_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/>
</record>
</data>
<data noupdate="1">
<record id="base.default_user" model="res.users">
<field name="groups_id" eval="[(4,ref('network_partner.group_np_user'))]"/>
</record>
<record model="ir.rule" id="network_partner_node_read_rule">
<field name="name">network.partner.node.read.rule</field>
<field name="model_id" ref="model_partner_node" />
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4,ref('network_partner.group_np_user'))]" />
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_unlink" eval="False"/>
<field name="perm_create" eval="False"/>
</record>
<record model="ir.rule" id="network_partner_node_write_rule">
<field name="name">network.partner.node.write.rule</field>
<field name="model_id" ref="model_partner_node" />
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4,ref('network_partner.group_np_manager'))]" />
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="perm_create" eval="True"/>
</record>
<record model="ir.rule" id="network_partner_net_read_rule">
<field name="name">network.partner.net.read.rule</field>
<field name="model_id" ref="model_partner_network" />
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4,ref('network_partner.group_np_user'))]" />
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_unlink" eval="False"/>
<field name="perm_create" eval="False"/>
</record>
<record model="ir.rule" id="network_partner_net_write_rule">
<field name="name">network.partner.net.write.rule</field>
<field name="model_id" ref="model_partner_network" />
<field name="global" eval="True"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4,ref('network_partner.group_np_manager'))]" />
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_unlink" eval="True"/>
<field name="perm_create" eval="True"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,40 @@
<odoo>
<data>
<record id="action_partner_network_nets" model="ir.actions.act_window">
<field name="name">Networks</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">partner.network</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{ }</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Partner Network.
</p>
</field>
</record>
<record id="action_partner_network_nodes" model="ir.actions.act_window">
<field name="name">Nodes</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">partner.node</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context">{ }</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new Node.
</p>
</field>
</record>
<record id="action_partner_network_view_node_tree" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="network_partner.view_partner_network_node_tree"/>
<field name="act_window_id" ref="action_partner_network_nodes"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,32 @@
<odoo>
<data noupdate="0">
<!-- Top menu item -->
<menuitem
id="menu_network_partner_root"
name="Redes de Contactos"
sequence="1"
groups="group_np_user"
/>
<!-- Submenu -->
<menuitem id="menu_network_partner_sub"
parent="network_partner.menu_network_partner_root"
name ="Redes"
sequence="10"
groups="group_np_user"
/>
<!-- nodos -->
<menuitem action="network_partner.action_partner_network_nodes"
id="menu_partner_networks_nodes"
parent="network_partner.menu_network_partner_sub"
sequence="10"
groups="group_np_user"
/>
<!-- redes -->
<menuitem action="network_partner.action_partner_network_nets"
id="menu_partner_network_nets"
parent="network_partner.menu_network_partner_sub"
sequence="20"
groups="group_np_user"
/>
</data>
</odoo>

View file

@ -0,0 +1,29 @@
<odoo>
<data noupdate="0">
<record id="view_partner_network_net_form" model="ir.ui.view">
<field name="name">partner.network.nets.form</field>
<field name="model">partner.network</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<form string="Redes">
<group col="4">
<field name="name"/>
</group>
</form>
</field>
</record>
<record id="view_partner_network_net_tree" model="ir.ui.view">
<field name="name">partner.network.nets.tree</field>
<field name="model">partner.network</field>
<field eval="8" name="priority"/>
<field name="arch" type="xml">
<tree string="Redes">
<field name="name"/>
</tree>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record id="view_partner_network_node_form" model="ir.ui.view">
<field name="name">partner.network.node.form</field>
<field name="model">partner.node</field>
<field name="priority">20</field>
<field name="arch" type="xml">
<form string="Node">
<header>
<p>Soy el header...</p>
</header>
<sheet>
<group col="4">
<field name="name"/>
<field name="street"/>
<field name="partner_ids"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_partner_network_node_tree" model="ir.ui.view">
<field name="name">partner.network.node.tree</field>
<field name="model">partner.node</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<tree string="Nodes">
<field name="name"/>
<field name="partner_ids"/>
<field name="street"/>
</tree>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_res_partner_network" model="ir.ui.view">
<field name="name">Nodo</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="priority">2</field>
<field name="arch" type="xml">
<xpath expr="//page[@name='internal_notes']" position="after">
<page name="nodes_page"
string="Nodes" >
<group name="nodes_information_group" >
<field name = "is_node"/>
<field name = "node_id" />
</group>
</page>
</xpath>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,34 @@
Order:
The status of the purchase order or the quotation request. "
A request for quotation is a purchase order in a 'Draft' status.
Then the order has to be confirmed by the user responsible , the status switch to 'Confirmed'.
Then the supplier must confirm the order to change the status to 'Approved'.
When the purchase order is paid and received, the status becomes 'Done'.
If a cancel action occurs in the invoice or in the receipt of goods, the status becomes "in exception."
STATE_SELECTION = [
('draft', 'Draft PO'),
('sent', 'RFQ'),
('bid', 'Bid Received'),
('confirmed', 'Waiting Approval'),
('approved', 'Purchase Confirmed'),
('except_picking', 'Shipping Exception'),
('except_invoice', 'Invoice Exception'),
('done', 'Done'),
('cancel', 'Cancelled')
Order.Line:
'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled')],
'Status', required=True, readonly=True, copy=False,
help=' * The \'Draft\' status is set automatically when purchase order in draft status. \
\n* The \'Confirmed\' status is set automatically as confirm when purchase order in confirm status. \
\n* The \'Done\' status is set automatically when purchase order is set as done. \
\n* The \'Cancelled\' status is set automatically when user cancel purchase order.'),