Commit 80321157 by Pedro Guerrero

Proyecto Base kyb_gestion_tributaria

parents
!.gitignore
*.pyc
# Sistema de Recaudación FIDETEL
css_replace
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="PROJECT" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.6 (/usr/bin/python2.7)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$USER_HOME$/Descargas/css_replace/.idea/css_replace.iml" filepath="$USER_HOME$/Descargas/css_replace/.idea/css_replace.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
# -*- encoding: utf-8 -*-
##############################################################################
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
##############################################################################
from . import models, controllers
\ No newline at end of file
# -*- encoding: utf-8 -*-
##############################################################################
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
##############################################################################
{
'name': "kyb Portal Web",
'description': " Modulo de Gestión de Portal Web",
'author': "Koyobo",
"website": "",
'category': '',
'version': '1.0',
'depends': ['base','website', 'auth_signup', 'website_form'],
'data': [
'custom_css_loader.xml',
'views/sgt_portal_web.xml',
'custom_css_loader.xml',
'views/sgt_website_templates.xml'
],
'demo': [
'demo/demo.xml',
],
'installable': True,
}
# -*- coding: utf-8 -*-
from . import main
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<template id="css_replace" name="css_replace assets" inherit_id="web.assets_common">
<xpath expr="." position="inside"><!-- expr="link[last()]"=> va a buscar el ultimo -->
<link rel="stylesheet" href="/kyb_portal_web/static/src/css/custom_css.css"/>
<link rel="stylesheet" href="/kyb_portal_web/static/src/less/custom_less.less"/>
<script type="text/javascript" src="/kyb_portal_web/static/src/js/custom_js.js"></script>
</xpath>
</template>
</data>
</openerp>
\ No newline at end of file
# -*- coding: utf-8 -*-
from . import portal_web
# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import ValidationError
import re
class res_users(models.Model):
_inherit = 'res.users'
login = fields.Char(required=True, help="Used to log into the system")
@api.constrains('login')
def formato_login(self):
# Validar que el login tenga un arroba
if self.login:
if not re.match('^[(a-z0-9\_\-\.)]+@[(a-z0-9\_\-\.)]+\.[(a-z)]{2,15}$', self.login.lower()):
raise ValidationError(('Formato de login invalido \n %s \n La forma correcta es: ejemplo@dominio.com' % (self.login).encode('utf-8')))
<section id="fondito">
<div id=" myCarousel1568397592930" class="container carousel slide s_banner" data-interval="5000" style="left: 13%; top:18%; height: 600px;z-index: 100; position: absolute;">
<ol class="carousel-indicators">
<li data-target="#myCarousel1568397592930" data-slide-to="0" class="active"/>
<li data-target="#myCarousel1568397592930" data-slide-to="1"/>
<li data-target="#myCarousel1568397592930" data-slide-to="2"/>
</ol>
<div class="carousel-inner">
<div class="item bg-alpha o_bg_img_opt_custom oe_img_bg oe_custom_bg active" style="background-size: 100% 100%; background-position: 0% 0%; background-image: url(&quot;/web/image/341/1.png&quot;);">
<div class="container"><div class="row content"/>in
</div>
</div>
<div class="item bg-alpha o_bg_img_opt_custom oe_img_bg oe_custom_bg" style="background-size: 100% 100%; background-position: 0% 0%; background-image: url(&quot;/web/image/339/objetivo_fidetel.jpg&quot;);">
<div class="container">
<div class="row content"/>
</div>
</div>
<div class="item bg-alpha o_bg_img_opt_custom oe_img_bg oe_custom_bg" style="background-size: 100% 100%; background-position: 0% 0%; background-image: url(&quot;/web/image/340/6922.png&quot;);">
<div class="container">
<div class="row content"/>
</div>
</div>
</div>
<div class="carousel-control left" data-target="#myCarousel1568397592930" data-slide="prev" style="width: 10%" data-cke-saved-href="#myCarousel1568397592930">
<i class="fa fa-chevron-left" data-original-title="" title=""/>
</div>
<div class="carousel-control right" data-target="#myCarousel1568397592930" data-slide="next" style="width: 10%" data-cke-saved-href="#myCarousel1568397592930">
<i class="fa fa-chevron-right" data-original-title="" title=""/>
</div>
</div>
</section>
<section class="s_text_image bg-alpha" style="background-attachment: fixed;background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5)); padding-top:30%;">
<div class="container">
<div class="row" ><!-- style="padding-top: 30%;" -->
<div class="col-md-6 ">
<h3 style="text-align: right;">
<b>
<font class="text-white" style="font-size: 48px;">FIDITEL</font>
</b>
</h3>
<p style="text-align: right;">
<font style="font-size: 18px;">Financia proyectos de Investigación y favorece en el desarrollo en el area de Telecomunicaciones.</font>
</p>
</div>
<div class="col-md-6 ">
<img class="img img-responsive pull-left mb16" src="http://k31.kn3.net/taringa/0/C/1/2/0/0/KonahsFvZ/F6D.jpg" alt="Texto de Odoo y bloque de imagen" data-original-title="" title=""/>
</div>
</div>
</div>
</section>
<section class="s_image_text bg-alpha" style="background-attachment: fixed;background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));">
<div class="container">
<div class="row">
<div class="col-md-6 ">
<img class="img img-responsive center-block mb16" src="http://k31.kn3.net/taringa/0/C/1/2/0/0/KonahsFvZ/F6D.jpg" alt="Imagen de Odoo y bloque de texto"/>
</div>
<div class="col-md-6 mt64 mb32">
<h3>
<font style="font-size: 48px;">PROMUEVE</font>
</h3>
<p>
<font style="font-size: 24px;">&amp;nbsp;</font>
<font style="font-size: 18px;">La formación, Innovación, Evolución y el Intercambio de saberes para el beneficio del Pais.&amp;nbsp;&amp;nbsp;</font>
</p>
</div>
</div>
</div>
</section>
<section class="s_text_image bg-alpha" style="background-attachment: fixed;background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));">
<div class="container">
<div class="row">
<div class="col-md-6 mt64 mb32">
<h3 style="text-align: right;">
<font style="font-size: 48px;">GARANTIZA</font>
</h3>
<p style="text-align: right;">
<font style="font-size: 18px;">Los recursos necesarios para el correcto desenvolvimiento de los proyectos financiados.</font>
</p>
<p style="text-align: right;">&amp;nbsp;</p>
</div>
<div class="col-md-6 mt32 mb32">
<img class="img img-responsive pull-left mb16" src="http://k31.kn3.net/taringa/0/C/1/2/0/0/KonahsFvZ/F6D.jpg" alt="Texto de Odoo y bloque de imagen" data-original-title="" title=""/>
</div>
</div>
</div>
</section>
<section class="s_comparisons mb0 mt0 bg-info oe_img_bg" style="background-size: cover; background-position: 0% 0%; background-attachment: fixed; background-image: url(&quot;/web/image/website.s_background_image_06&quot;);">
<div class="container" style="">
<h2 class="text-center" style="color: black;">
<font class="text-white" style="">Sistema de Recaudacion</font>
</h2>
<div class="row" style="">
<div class="col-xs-12 col-md-4" style="color: black;">
<div class="panel panel-primary">
<div class="panel-body text-center " style="background:linear-gradient(180deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url(https://k60.kn3.net/taringa/2/3/D/E/D/B/Ximelove/142.jpg);">
<span style=" padding: 30px; color:white; font-size: 50px;" class="glyphicon glyphicon-user"/>
<h3>
<font class="text-white" style="">Sistema de Recaudacion</font>
</h3>
<p>
<font class="text-white">● Datos Básicos</font>
<br/>
<font class="text-white">● Domicilio Fiscal</font>
<br/>
<font class="text-white">● Registro Mercantil</font>
<br/>
<font class="text-white">● Representante Legal</font>
<br/>
<font class="text-white">● Contacto Enlace</font>
<br/>
</p>
</div>
</div>
</div>
<div class="col-md-4 col-xs-12 mb32 mt0" style="color: black;">
<div class="panel panel-primary">
<div class="panel-body text-center" style="background:linear-gradient(180deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url(https://k60.kn3.net/taringa/2/3/D/E/D/B/Ximelove/142.jpg);">
<span style=" padding: 25px; color:white; font-size: 50px;" class="glyphicon glyphicon-book"/>
<h3>
<font class="text-white" style="">Declarar</font>
</h3>
<p style="text-align: justify; ">
<font class="text-white" style="">&amp;nbsp;Indique los ingresos brutos mensuales correspondientes al trimestre anterior, la suma de estos ingresos se tomará como base para hacer el cálculo del aporte, que se obtiene del 0,5% según el articulo 151 de la Ley Orgánica de Telecomunicaciones. Con el cálculo del aporte usted deberá hacer la declaración formal.</font>
</p>
</div>
</div>
</div>
<div class="col-md-4 col-xs-12" style="">
<div class="panel panel-primary" style="">
<div class="panel-body text-center" style="background:linear-gradient(180deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7)), url(https://k60.kn3.net/taringa/2/3/D/E/D/B/Ximelove/142.jpg);">
<span style=" padding: 25px; color:white; font-size: 50px;" class="glyphicon glyphicon-phone"/>
<h3>
<font class="text-white" style="">Realizar Pagos</font>
</h3>
<p style="text-align: justify; ">
<font class="text-white" style="">&amp;nbsp;Podra realizar sus pagos a través de la opción Botón de Pago o a través de las taquillas del Banco de Venezuela, realizando un depósito en la cuenta corriente Nº 0102- 0762-21- 0000021872 a nombre del MPPEUT-FIDETEL RIF G-20011296-4 Una vez realizado el deposito deberá notificarlo a través del sistema en el módulo Notificacion de Pagos.</font>
</p>
</div>
</div>
</div>
</div>
</div>
</section>
\ No newline at end of file
<data inherit_id="website.footer_custom" customize_show="True" name="Automatic Footer">
<xpath expr="//div[@id='footer']" position="replace">
<div >
<div class="row">
<div class="col-md-12">
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-md-3 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
About us
</div>
<p class="white-text">
El Fondo de Investigación y Desarrollo de las Telecomunicaciones (FIDETEL), garantiza de manera eficiente los recursos para el financiamiento de proyectos de desarrollo e investigación, así como también la formación de Talento Venezolano.
</p>
</div>
<div class="col-md-3 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Nuestros Productos
</div>
<div class="footer-links">
<a href="#">
Cuentas
</a>
<a href="#">
Liquidaciones
</a>
<a href="#">
RUC
</a>
<a href="#">
...
</a>
</div>
</div>
<div class="col-md-3 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Contactanos
</div>
<div class="footer-links">
<a href="#">
0212-5557505
</a>
<a href="#">
EXT 7543, 7964, 7318
</a>
<a href="#">
fidetel@mppeuct.gob.ve
</a>
<a href="#">
RIF N° G-20011296-4
</a>
</div>
</div>
<div class="col-md-3 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Support
</div>
<div class="footer-links">
<a href="#">
Affiliate
</a>
<a href="#">
Login
</a>
<a href="#">
...
</a>
<a href="#">
...
</a>
</div>
<div class="footer-social-links m-t-30">
<li>
<a href="#">
<i class="fa fa-facebook" aria-hidden="true"></i>
</a>
<a href="#">
<i class="fa fa-twitter" aria-hidden="true"></i>
</a>
<a href="#">
<i class="fa fa-linkedin" aria-hidden="true"></i>
</a>
<a href="#">
<i class="fa fa-youtube" aria-hidden="true"></i>
</a>
</li>
</div>
</div>
</div>
</div>
</footer>
</div>
</div>
</div>
</xpath>
</data>
<t t-name="website.mision-y-vision">
<t t-call="website.layout">
<div class="container" style="box-shadow: 0px 0px 20px 17px rgba(0,0,0,0.75); margin-top: 50px; margin-bottom: 50px;">
<div id="wrap" class="oe_structure oe_empty">
<section class="s_comparisons">
<div class="container">
<h2 class="text-center">Nosotros</h2>
<div class="row">
<div class="col-md-4 col-xs-12" style="width: 30%">
<div class="panel panel-primary" style="background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));">
<div class="panel-heading text-center">
<h3 style="margin: 0">Visión</h3>
</div>
<div class="panel-body text-center text-muted">
<h3 style="text-align: justify; margin: 0px;">
<font style="font-size: 18px;" class="text-white">En concordancia con el Sistema Nacional de Ciencia, Tecnología e Innovación y bajo la tutela del Ministerio de Ciencia y Tecnología, desarrollar estrategias, políticas, planes, programas y normas que apoyen la inversión y el financiamiento en la Investigación, el Desarrollo y la Consolidación del sector de las Telecomunicaciones.</font>
</h3>
</div>
</div>
</div>
<div class="col-md-4 col-xs-12" style="width: 40%;">
<div class="panel panel-primary" style="background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));">
<div class="panel-heading text-center">
<h3 style="margin: 0">FIDETEL</h3>
</div>
<div class="panel-body text-center text-muted">
<h3 style="text-align: justify; margin: 0px;">
<font style="font-size: 18px;" class="text-white">Creado a través de la Ley Orgánica de Telecomunicaciones, publicada en la Gaceta Oficial N°36970 del 12 de junio del 2000, el Fondo de Investigación y Desarrollo de las Telecomunicaciones (FIDETEL), el cual tendrá carácter de patrimonio separado, dependiente del Ministerio de Ciencia y Tecnología, cuyo objetivo primordial es coordinar, impulsar y facilitar el fortalecimiento de la investigación y el desarrollo de las telecomunicaciones, garantizando además que todos los esfuerzos estén orientados a generar impacto positivo en los beneficiarios.</font>
<br/>
</h3>
</div>
</div>
</div>
<div class="col-md-4 col-xs-12" style="width: 30%">
<div class="panel panel-primary" style="background:linear-gradient(180deg, rgba(0,0,0,0.5), rgba(0,0,0,0.5));">
<div class="panel-heading text-center">
<h3 style="margin: 0">Misión</h3>
</div>
<div class="panel-body text-center text-muted">
<h3 style="text-align: justify; margin: 0px;">
<font style="font-size: 18px;" class="text-white">Ser el instrumento que permita garantizar el fortalecimiento de la investigación y el desarrollo de las telecomunicaciones en Venezuela, orientando todos los esfuerzos a generar impacto positivo en los diferentes sectores de la sociedad.</font>
<br/>
</h3>
</div>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</t>
</t>
main {
background:linear-gradient(180deg, rgba(0,0,0,0.2), rgba(0,0,0,0.2)), url(img_fidetel/fondo.png);
background-repeat: no-repeat;
background-attachment: fixed;
}
img#fondo {
width: 100%;
background-size: cover;
}
@media (max-width: 400px) {
img#fondo{
height: 400px;
}
}
div.o_my_details {
color: white !important;
}
.sheet_silver_o { /* Este codigo es la hoja que contine a los formularios */
max-width: 1500px;
background-color: silver;
opacity: .8;
padding: 10px;
/*padding-bottom: 18px;*/
margin: 5% 5%;
border-radius: 10px;
}
.tp_contri{
padding: 10px;
margin: 5% 5%;
background-color: silver;
opacity: .8;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
}
.oe_login_form{
max-width: 650px !important;
}
#modal_id {
background-color: silver !important;
opacity: .8;
padding: 0 18px;
border-radius: 10px;
margin-bottom: 50px;
}
.form-group {
margin-top: 25px;
margin-bottom: 25px;
color: black;
}
.form-group input {
height: 42px;
border-radius: 5px;
border: 0;
font-size: 18px;
letter-spacing: 2px;
color: black;
/*padding-left: 54px;*/
}
.form-input button {
width: 40%;
margin: 5px 0 25px;
}
.btn-success {
background-color: #1c6288;
font-size: 19px;
border-radius: 5px;
padding: 7px 14px;
border: 1px solid #daf1ff;
}
.btn-success:hover {
background-color: #13445e;
border: 1px solid #daf1ff;
}
a.btn.btn-link.pull-right,a.btn.btn-link.pull-left, button.btn.btn-primary.pull-left
{
display: none !important;
}
/***********************************************************************/
.footer{
padding: 60px 0;
width: 100%;
background: #1D3877;
color: #fff;
}
.footer-title{
position: relative;
color: #fff;
font-size: 24px;
font-weight: 600;
margin-top: 5px;
margin-bottom: 20px;
border-bottom: 1px solid #4e4e4e;
}
.footer-title:after{
position: absolute;
content: '';
left: 0;
bottom: 0;
width: 30px;
height: 4px;
background: #ff304d;
}
.footer-links a{
padding: 10px 0;
border-bottom: 1px solid #404040;
color: #fff;
display: block;
transition: color 0.5s ease-in-out;
text-decoration:none;
}
.footer-links a:hover{
color: #ff304d;
}
.footer-social-links li{
display: inline-block;
}
.footer-social-links a{
width: 40px;
height: 40px;
font-size: 16px;
float: left;
margin-right: 10px;
padding: 10px;
border: 1px solid #404040;
border-radius: 50px;
text-align: center;
color: #fff;
line-height: 1;
-webkit-transition: background 0.3s ease-in-out;
-moz-transition: background 0.3s ease-in-out;
transition: background 0.3s ease-in-out;
background:#3B008D;
}
.footer-social-links a:hover{
background: #ff304d;
}
\ No newline at end of file
odoo.define('kyb_portal_web.tour', function(require) {
"use strict";
var core = require('web.core');
var tour = require('web_tour.tour');
var base = require("web_editor.base");
var _t = core._t;
tour.register('kyb_portal_web_tour', {
url: "/",
wait_for: base.ready(),
}, [tour.STEPS.MENU_MORE, {
trigger: 'a[class=dropdown-toggle]',
content: _t('Ingresar a mi cuenta'),
position: 'bottom',
}]);
});
//----------------------------------------------------
$(document).on('change','.btn-file :file',function(){
var input = $(this);
var numFiles = input.get(0).files ? input.get(0).files.length : 1;
var label = input.val().replace(/\\/g,'/').replace(/.*\//,'');
input.trigger('fileselect',[numFiles,label]);
});
$(document).ready(function(){
$('.btn-file :file').on('fileselect',function(event,numFiles,label){
var input = $(this).parents('.input-group').find(':text');
var log = numFiles > 1 ? numFiles + ' files selected' : label;
if(input.length){ input.val(log); }else{ if (log) alert(log); }
});
});
\ No newline at end of file
.carousel, .parallax, .blockquote {
overflow: visible;
}
@media (max-width: 400px) {
section, .parallax, .row, .hr, .blockquote {
height: 75vh !important;
}
}
\ No newline at end of file
<odoo>
<data>
<template id="start_custom" inherit_id="website.homepage">
<xpath expr="//div[@class='oe_structure oe_empty']" position="replace">
<div id="wrap" class="oe_structure oe_empty">
<!-- ******************************************************************************************************************************************* -->
<div>
<img id="fondo" src="kyb_portal_web/static/src/css/img_fidetel/cintillo_fidete.png" />
</div>
<!-- ******************************************************************************************************************************************* -->
</div>
</xpath>
</template>
<template id="footer" inherit_id="website.footer_custom">
<xpath expr="//div[@id='footer']" position="replace">
<div>
<div class="row">
<div class="col-md-12">
<footer class="footer">
<div class="container">
<div class="row">
<div class="col-md-4 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Quiénes Somos
</div>
<p class="white-text text-justify">
El Fondo de Investigación y Desarrollo de las Telecomunicaciones (FIDETEL), garantiza de manera eficiente los recursos para el financiamiento de proyectos de desarrollo e investigación, así como también la formación de Talento Venezolano.
</p>
</div>
<div class="col-md-4 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Contáctanos
</div>
<div class="footer-links">
<a href="#">(0212)555-7656</a>
<a href="#">EXT 7599</a>
<a href="#">fidetel@mppct.gob.ve</a>
<a href="#">RIF G-20011296-4</a>
<a href="#">Av Universidad, esquina el Chorro, Torre Ministerial, Ministerio del Poder Popular para Ciencia y Tecnología, piso 23, Caracas.</a>
</div>
</div>
<div class="col-md-4 m-b-30">
<div class="footer-title m-t-5 m-b-20 p-b-8">
Redes Sociales
</div>
<div class="footer-social-links m-t-30">
<li>
<a href="https://www.facebook.com/Fidetel/">
<i class="fa fa-facebook" aria-hidden="true"></i>
</a>
<a href="https://twitter.com/fidetel_?lang=es">
<i class="fa fa-twitter" aria-hidden="true"></i>
</a>
<a href="https://www.instagram.com/p/BaFKFAfhxL5/">
<i class="fa fa-instagram" aria-hidden="true"></i>
</a>
</li>
</div>
</div>
</div>
</div>
</footer>
</div>
</div>
</div>
</xpath>
</template>
<template id="footer_copyright_hidden" inherit_id="website.layout_footer_copyright">
<xpath expr="//div[@class='pull-right']" position="replace">
<i><p class="pull-right">Creado por Koyobo</p></i>
</xpath>
</template>
<template id="probando" inherit_id="website.submenu">
<xpath expr="//li[1]" position="replace">
</xpath>
</template>
</data>
</odoo>
\ No newline at end of file
# -*- coding: utf-8 -*-
from . import models, wizard
# -*- coding: utf-8 -*-
{
"name": "Koyobo SGT Acceso a Portal",
"version": "1.0",
"summary": "Gestión de Acceso a Portal",
"description": """
Gestión de Acceso a Portal.
El sistema de gestión de acceso a portal es una aplicación segura y fácil de usar en Odoo,
permité realizar la gestiones de creación de usuarios automaticos y manual, además de
otorgar permisos de accesos.
""",
"author": "Jeikasoft Consultores Tecnólogicos VE",
"category": "SGT",
"website": "",
"images": ['static/description/icon.png'],
"depends": ['base', 'kyb_sgt_ruc', 'portal', 'kyb_sgt_cuentas'],
"data": [
'data/sgt_portal_data.xml',
'views/res_partner_view.xml',
'wizard/portal_wizard_view.xml',
],
"demo": [],
"qweb": [],
"installable": True,
"application": True,
"auto_install": False
}
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<record id="mail_template_welcome_sgt" model="mail.template">
<field name="name">Portal: nuevo usuario</field>
<field name="model_id" ref="kyb_sgt_acceso_portal.model_portal_wizard_user"/>
<field name="email_to">${object.partner_id.email}</field>
<field name="subject">Credenciales ${user.company_id.name}</field>
<field name="lang">${object.partner_id.lang}</field>
<field name="auto_delete" eval="True"/>
<field name="user_signature" eval="True"/>
<field name="body_html">
<![CDATA[
<p>Estimado/a aportante ${object.user_id.name or ''},</p>
<p>Reciba un cordial saludo, queremos informar que se le ha otorgado el acceso al portal ${user.company_id.name}.</p>
<p>Sus datos de identificación son:</p>
<ul>
<li>R.I.F: ${object.partner_id.display_registro or ''}</li>
<li>Correo Electronico: ${object.user_id.login or ''}</li>
<li>N° de Contribuyente: ${object.partner_id.numero_contribuyente or ''}</li>
</ul>
<p> Establezca su contraseña a través del siguiente enlace:
<div style="text-align: center; margin-top: 16px;">
<a href="${object.user_id.signup_url}" style="padding: 5px 10px; font-size: 12px; line-height: 18px; color: #FFFFFF; border-color:#875A7B; text-decoration: none; display: inline-block; margin-bottom: 0px; font-weight: 400; text-align: center; vertical-align: middle; cursor: pointer; white-space: nowrap; background-image: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius:3px">Crear Contraseña</a>
</div>
</p>
<p> Por medio del portal podrá realizar las distintas gestiones correspondiente a ${user.company_id.name}.</p>
<p> ${object.wizard_id.welcome_message or ''} </p>
]]>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
# -*- coding: utf-8 -*-
from . import res_partner
# -*- coding: utf-8 -*-
from odoo import api, models
class SgtResPartner(models.Model):
_inherit = 'res.partner'
@api.multi
def get_signup_url(self):
self.ensure_one()
return self.partner_id.with_context(signup_valid=True)._get_signup_url_for_action(
action='/mail/view',
model=self._name,
res_id=self.id)[self.partner_id.id]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="portal.svg"
inkscape:version="0.92.1 r15371"
inkscape:export-filename="/home/carolaysalcedo/Vídeos/Usuario.png"
inkscape:export-xdpi="95"
inkscape:export-ydpi="95">
<metadata
id="metadata8">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs6">
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect4600"
effect="bspline" />
<inkscape:path-effect
only_selected="false"
apply_with_weight="true"
apply_no_weight="true"
helper_size="0"
steps="2"
weight="33.333333"
is_visible="true"
id="path-effect4600-3"
effect="bspline" />
<inkscape:path-effect
effect="bspline"
id="path-effect4600-5"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
<inkscape:path-effect
effect="bspline"
id="path-effect4600-3-3"
is_visible="true"
weight="33.333333"
steps="2"
helper_size="0"
apply_no_weight="true"
apply_with_weight="true"
only_selected="false" />
</defs>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="704"
id="namedview4"
showgrid="false"
inkscape:zoom="5.6568543"
inkscape:cx="33.53083"
inkscape:cy="35.113143"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g4954" />
<g
id="g4954">
<g
transform="matrix(0.06879721,0,0,-0.06873516,-1494.9379,1628.3973)"
id="g5124" />
<g
style="fill:#480b44;fill-opacity:1;stroke:#ffffff;stroke-width:132.04353333;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0.02558573,0,0,-0.02593749,-391.66618,155.80604)"
id="g4844">
<path
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
id="path4938"
d="m 5153.1685,5527.2476 -1294.464,-1191.004 -1.656,-1633.5355 1755.4806,-0.6085 722.0656,821.7279 z"
style="fill:#480b44;fill-opacity:1;stroke:none;stroke-width:38.81835175px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccsccssssssc"
d="m 5906.2029,4593.3399 c -2.7484,-3.2897 -5.4061,-6.6511 -8.2282,-9.88 -103.5034,-118.3707 -242.3276,-183.5603 -390.8874,-183.5603 -148.5654,0 -287.384,65.1896 -390.8874,183.5603 -2.8221,3.2289 -32.9994,-18.8234 -35.7535,-15.5337 -272.3558,-121.4171 -435.3015,-364.6072 -435.3015,-674.5218 v -199.6766 c 0,-56.2772 46.762,-101.9006 104.444,-101.9006 h 1514.9968 c 57.682,0 104.4441,45.6234 104.4441,101.9006 v 199.6766 c 0,309.9146 -190.4711,578.5184 -462.8269,699.9355"
style="fill:#480b44;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:132.04353333;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path98"
inkscape:connector-curvature="0" />
<path
d="m 5507.0873,4641.366 c 119.9597,0 229.0447,52.9766 310.5271,139.4961 89.8011,95.3545 146.055,231.4726 146.055,382.6675 0,288.3856 -204.417,522.1637 -456.5821,522.1637 -252.1651,0 -456.5878,-233.7781 -456.5878,-522.1637 0,-151.1949 56.2596,-287.313 146.0607,-382.6675 81.4824,-86.5195 190.5732,-139.4961 310.5271,-139.4961"
style="fill:#480b44;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:132.04353333;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path100"
inkscape:connector-curvature="0" />
</g>
<path
sodipodi:nodetypes="cccc"
inkscape:connector-curvature="0"
id="path4936"
d="m -241.10685,35.892469 0.69003,-0.169982 -0.0831,1.092477 z"
style="fill:#ffffff;stroke:#f4ffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<rect
y="0.0021000206"
x="0.0033462904"
height="79.996986"
width="80.00135"
id="rect4509"
style="opacity:1;fill:#9c5789;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.70690417;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:#480b44;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 17.627753,6.962283 0.02734375,28.518919 0.00334629,79.999084 40.73598,80.016573 64.177006,53.510504 c 0,0 -31.08077,0.09092 -46.549253,0 z"
id="path4668"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
d="M 20.747119,50.391144 H 61.057646 V 10.081654 H 20.747119 Z m 43.429887,3.11936 H 17.627753 V 6.962283 h 46.549253 v 46.548221"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.10397886;stroke-opacity:1"
id="path32"
inkscape:connector-curvature="0" />
<path
d="m 24.624495,27.935307 c 4.041273,4.229376 8.045825,8.547035 12.097584,12.748704 l 0.05772,0.05985 c 0.22482,0.233051 0.407635,0.28946 0.643664,0.295693 0.264408,0.007 0.502124,-0.061 0.737535,-0.292724 C 48.088789,30.974483 62.085747,17.70252 71.98849,7.894605 L 71.42954,6.785521 c -9.718088,8.126947 -23.084725,20.755075 -32.831738,28.815563 -0.298454,0.246812 -0.465097,0.339324 -0.736248,0.346586 -0.305516,0.0082 -0.619826,-0.09917 -0.84927,-0.345548 -3.168035,-3.401885 -6.290705,-6.887759 -9.422896,-10.33123 0,0 -0.740173,0.169326 -1.084588,0.323246 -0.311268,0.139106 -0.621607,0.303451 -0.871492,0.535389 -0.23776,0.220685 -0.40948,0.506939 -0.569685,0.789014 -0.182322,0.321018 -0.439128,1.016766 -0.439128,1.016766"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.37795275;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path44"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssasccsascaaac" />
<g
id="g4677"
transform="matrix(-0.00654945,0.01343872,0.01343872,0.00654945,45.133042,-6.0095207)" />
<g
style="fill:#ffffff"
transform="matrix(0.07181109,0,0,-0.07461857,-425.79477,437.41065)"
id="g5348">
<text
transform="scale(0.9995489,-1.0004513)"
id="text5346"
y="-4848.0293"
x="6511.7568"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:204.63269043px;line-height:1.25;font-family:Cantarell;-inkscape-font-specification:Cantarell;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10.96246529"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Century Schoolbook L';-inkscape-font-specification:'Century Schoolbook L Bold';fill:#ffffff;stroke-width:10.96246529"
y="-4848.0293"
x="6511.7568"
id="tspan5344"
sodipodi:role="line">KYB</tspan></text>
</g>
<rect
style="opacity:1;fill:#9c5789;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.06906664;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4727"
width="0.34375"
height="13.859375"
x="60.713619"
y="10.342409" />
<rect
y="9.8502216"
x="64.178345"
height="14.796875"
width="0.34375"
id="rect4729"
style="opacity:1;fill:#9c5789;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.10463285;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>
<?xml version="1.0"?>
<odoo>
<!-- Botón de acción para levantar el wizard de administrar los accesos a ṕortal -->
<record id="action_view_portal_sgt" model="ir.actions.act_window">
<field name="name">Acceso a Portal</field>
<field name="res_model">portal.wizard</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="portal.wizard_view"/>
<field name="target">new</field>
</record>
<record id="value_portal_wizard_sgt" model="ir.values">
<field name="model_id" ref="portal.model_portal_wizard" />
<field name="name">Acceso a Portal</field>
<field name="key2">client_action_multi</field>
<field name="value" eval="'ir.actions.act_window,' + str(ref('action_view_portal_sgt'))" />
<field name="key">action</field>
<field name="model">res.partner</field>
</record>
<!-- Fin del boton portal_wizard -->
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.form</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="model">res.partner</field>
<field name="arch" type="xml">
<xpath expr="//button[@name='ver_empresas']" position="before">
<!--button class="oe_inline oe_stat_button" type="action" icon="fa-external-link-square" name="kyb_sgt_acceso_portal.action_view_portal_sgt" string="Acceso Portal" attrs="{'invisible':[('is_contribuyente', '!=', True)]}"/-->
</xpath>
</field>
</record>
</odoo>
# -*- coding: utf-8 -*-
from . import portal_wizard
# -*- coding: utf-8 -*-
from logging import getLogger
from odoo import api, models, fields
from odoo.exceptions import UserError
_logger = getLogger(__name__)
class SgtPortalWizard(models.TransientModel):
_inherit = 'portal.wizard'
@api.onchange('portal_id')
def onchange_portal_id(self):
"""Sobreescribiendo la función original para que por default el boolean in_portal
esté True cuando el registro sea una compañia"""
# for each partner, determine corresponding portal.wizard.user records
partner_ids = self.env.context.get('active_ids', [])
contact_ids = set()
user_changes = []
for partner in self.env['res.partner'].sudo().browse(partner_ids):
contact_partners = partner.child_ids or [partner]
for contact in contact_partners:
# make sure that each contact appears at most once in the list
if contact.id not in contact_ids:
contact_ids.add(contact.id)
if contact.is_contribuyente and contact.analista_verificacion_ids:
in_portal = True
else:
in_portal = False
if contact.user_ids:
in_portal = self.portal_id in contact.user_ids[0].groups_id
user_changes.append((0, 0, {
'partner_id': contact.id,
'email': contact.email,
'in_portal': in_portal,
}))
self.user_ids = user_changes
@api.multi
def action_apply(self):
_logger.info('\n\n\n {} \n\n\n'.format(self.user_ids))
for i in self.user_ids:
_logger.info('\n\n\n {} \n\n\n'.format(i))
cuenta = self.env['sgt_cuentas'].search([('partner_id', '=', i.partner_id.id)])
if not cuenta and i.partner_id.analista_verificacion_ids:
self.ensure_one()
self.env['sgt_cuentas'].create({'partner_id': i.partner_id.id,
'state': 'activo',
'ciclo_facturacion_id': 1})
i.action_apply()
_logger.info('\n\n\n {} \n\n\n'.format(i))
else:
return
return {'type': 'ir.actions.act_window_close'}
class WizardUser(models.TransientModel):
_inherit = 'portal.wizard.user'
@api.multi
def _send_email(self):
if not self.env.user.email:
raise UserError(('Debe tener una dirección de correo electrónico en sus Preferencias de usuario para enviar correos electrónicos.'))
# determine subject and body in the portal user's language
template = self.env.ref('kyb_sgt_acceso_portal.mail_template_welcome_sgt')
for wizard_line in self:
lang = wizard_line.user_id.lang
partner = wizard_line.user_id.partner_id
portal_url = partner.with_context(signup_force_type_in_url='', lang=lang)._get_signup_url_for_action()[partner.id]
partner.signup_prepare()
if template:
template.with_context(dbname=self._cr.dbname, portal_url=portal_url, lang=lang).send_mail(wizard_line.id, force_send=True)
else:
_logger.warning("No se encontró una plantilla de correo electrónico para enviar correos electrónicos al usuario del portal")
return True
\ No newline at end of file
<?xml version="1.0"?>
<odoo>
<data>
<record id="portal_wizard_inherit_form" model="ir.ui.view">
<field name="name">portal.wizard.form</field>
<field name="model">portal.wizard</field>
<field name="inherit_id" ref="portal.wizard_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="string">Aportante</attribute>
</xpath>
<xpath expr="//field[@name='in_portal']" position="attributes">
<attribute name="readonly">True</attribute>
</xpath>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
import models
\ No newline at end of file
# -*- coding: utf-8 -*-
{
"name": "Koyobo SGT Cobranzas",
"version": "1.0",
"summary": "Gestión de Cobranzas",
"description": """
Gestión de Cobranzas.
El sistema de gestión de liquidación es una aplicación eficaz, eficiente y fácil de usar en Odoo,
permité realizar la gestiones de las: Declaraciones, Liquidaciones y Pagos.
""",
"author": "Jeikasoft Consultores Tecnólogicos VE",
"category": "SGT",
"website": "",
"images": ['static/description/icon.png'],
"depends": ['base', 'kyb_sgt_liquidaciones'],
"data": [
'data/sgt_cobranzas_data.xml',
'security/ir.model.access.csv',
'views/sgt_cobranzas_view.xml',
],
"demo": [],
"qweb": [],
"installable": True,
"application": True,
"auto_install": False
}
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- Correlativos -->
<record id="sgt_cobranza_correlativo_conciliaciones" model="ir.sequence">
<field name="name">Código de las Conciliaciones</field>
<field name="code">sgt_conciliacion_pagos</field>
<field name="prefix">CP-</field>
<field name="padding">5</field>
</record>
<record id="sgt_cobros_acciones_correlativo_cobro" model="ir.sequence">
<field name="name">Código de los Cobros</field>
<field name="code">sgt_cobros_acciones</field>
<field name="prefix">COB-</field>
<field name="padding">5</field>
</record>
<record id="sgt_cartera_cobranza_correlativo" model="ir.sequence">
<field name="name">Código de las Carteras</field>
<field name="code">sgt_cartera_cobranza</field>
<field name="prefix">CARTERA-</field>
<field name="padding">5</field>
</record>
<!-- Cron -->
<record id="sgt_cobranza_cron_evualar_fecha_accion_vencida" model="ir.cron">
<field name="name">Evaluar Acciones de Cobro Vencidas</field>
<field name="numbercall">-1</field>
<field name="priority">5</field>
<field name="interval_type">days</field>
<field name="interval_number">1</field>
<field name="model">sgt_cobros_acciones</field>
<field name="function">_cron_validar_fecha</field>
<field name="active" eval="True"/>
</record>
<!-- Tipos de Morosidades -->
<record id="tipo_mor_no_declaracion" model="sgt_tipos_morosidades">
<field name="codigo">01</field>
<field name="descripcion">No Declaraciones</field>
</record>
<record id="tipo_mor_saldo_deudor" model="sgt_tipos_morosidades">
<field name="codigo">02</field>
<field name="descripcion">Saldo Deudor</field>
</record>
<record id="tipo_mor_credito_fiscal" model="sgt_tipos_morosidades">
<field name="codigo">03</field>
<field name="descripcion">Credito Fiscal</field>
</record>
<!--Correo devuelto del pago -->
<record id="mail_template_devolucion_pago_sgt" model="mail.template">
<field name="name">Portal: devolucion del Pago</field>
<field name="model_id" ref="kyb_sgt_cobranzas.model_sgt_conciliacion_pagos"/>
<field name="email_to">${object.partner_id.email}</field>
<field name="subject">Devolución del Pago ${user.company_id.name}</field>
<field name="auto_delete" eval="True"/>
<field name="user_signature" eval="True"/>
<field name="body_html">
<![CDATA[
<p>Estimado/a Aportante.</p>
<p>Reciba un cordial saludo, queremos informale que se le ha devuelto el pago, por no coincidir con nuestro asientos diarios. </p>
<p>Invintamos a que porfavor revise, valide y vuelva a realizar la gestión del pago o contacte vía telefonica con nosotros ${user.company_id.name}.</p>
]]>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
# -*- coding: utf-8 -*-
import sgt_cobranzas, sgt_cuentas
# -*- coding: utf-8 -*-
from datetime import datetime
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from logging import getLogger
_logger = getLogger(__name__)
ls_estatus_conciliacion = [('borrador', 'Borrador'),
('conciliado', 'Conciliado'),
('devuelto', 'Devuelto')]
ls_estatus_cobros = [('activo', 'Activo'),
('cerrado', 'Cerrado')]
ls_estatus_cobranza = [('activo', 'Activo'),
('cerrado', 'Cerrado')]
ls_estatus_accion_cobros = [('activo', 'Activo'),
('vencido', 'Vencido'),
('cerrado', 'Cerrado')]
class SgtConciliacionPagos(models.Model):
_name = 'sgt_conciliacion_pagos'
_rec_name = 'numero_conciliacion'
estatus = fields.Selection(ls_estatus_conciliacion, string='Estatus de Conciliación', default='borrador')
numero_conciliacion = fields.Char(string='N° de Conciliación')
partner_id = fields.Many2one('res.partner', 'Aportante')
pagos_id = fields.Many2one('sgt_pagos', string='Pago Efectuado')
movimiento_id = fields.Many2one(related='pagos_id.movimiento_id')
observacion = fields.Text(string='Observación')
@api.multi
def pago_conciliado(self):
if self.observacion:
if self.pagos_id.movimiento_id.concepto_movimiento_id.codigo == '100':
self.pagos_id.movimiento_id.pagado = True
self.env['sgt_pagos'].search([('id', '=', self.pagos_id.id)]).write({'estatus': 'conciliado'})
self.env['sgt_movimientos'].search([('declaracion_id', '=', self.pagos_id.movimiento_id.declaracion_id.id), ('tipo_movimiento', '=', 'credito'), ('estatus', '!=', 'pagado')]).write({'estatus': 'pagado'})
self.estatus = 'conciliado'
elif self.pagos_id.movimiento_id.concepto_movimiento_id.codigo == '200':
self.pagos_id.movimiento_id.pagado = True
self.env['sgt_pagos'].search([('id', '=', self.pagos_id.id)]).write({'estatus': 'conciliado'})
self.env['sgt_movimientos'].search([('movimiento_id', '=', self.pagos_id.movimiento_id.id), ('tipo_movimiento', '=', 'credito'), ('estatus', '!=', 'pagado')]).write({'estatus': 'pagado'})
self.estatus = 'conciliado'
elif self.pagos_id.movimiento_id.concepto_movimiento_id.codigo == '300':
self.pagos_id.movimiento_id.pagado = True
self.env['sgt_pagos'].search([('id', '=', self.pagos_id.id)]).write({'estatus': 'conciliado'})
self.env['sgt_movimientos'].search([('movimiento_id', '=', self.pagos_id.movimiento_id.id), ('tipo_movimiento', '=', 'credito'), ('estatus', '!=', 'pagado')]).write({'estatus': 'pagado'})
self.estatus = 'conciliado'
elif self.pagos_id.movimiento_id.concepto_movimiento_id.codigo == '310':
self.pagos_id.movimiento_id.pagado = True
self.env['sgt_pagos'].search([('id', '=', self.pagos_id.id)]).write({'estatus': 'conciliado'})
self.env['sgt_movimientos'].search([('pago_id', '=', self.pagos_id.id), ('tipo_movimiento', '=', 'credito'), ('estatus', '!=', 'pagado')]).write({'estatus': 'pagado'})
self.estatus = 'conciliado'
else:
raise UserError(_('El Campo de Observación se encuentra Vacío.'))
@api.multi
def devolver_pago(self):
if self.observacion and self.partner_id.email:
template = self.env.ref('kyb_sgt_cobranzas.mail_template_devolucion_pago_sgt')
if template:
template.with_context(dbname=self._cr.dbname).send_mail(self.id, force_send=True)
self.pagos_id.estatus = 'Cancelado'
self.estatus = 'devuelto'
else:
raise UserError(_('Template no definido.'))
else:
raise UserError(_('El Campo de observaciones se encuentra Vacío.'))
@api.model
def create(self, values):
values.update({'numero_conciliacion': self.env['ir.sequence'].next_by_code('sgt_conciliacion_pagos')})
return super(SgtConciliacionPagos, self).create(values)
class SgtCobrosAcciones(models.Model):
_name = 'sgt_cobros_acciones'
_rec_name = 'codigo'
_inherit = ['mail.thread', 'ir.needaction_mixin']
partner_id = fields.Many2one('res.partner', string='Contribuyente')
cuenta_id = fields.Many2one('sgt_cuentas', string='Cuenta')
codigo = fields.Char(string='Código', size=20, help='Código del Cobro')
comentarios = fields.Text(string='Comentarios', help='Comentarios de la Acción')
fecha_promesa_pago = fields.Date(string='Fecha de Promesa de Pago', help='Fecha de Promesa de Pago ')
monto_prometido = fields.Float(string='Monto Prometido', help='Monto que el cliente se comprometió a pagar en la fecha prometida', digits=(12, 2))
in_wizard = fields.Boolean(default=False)
state = fields.Selection(ls_estatus_accion_cobros, string='Estatus', default='activo')
vencido = fields.Boolean(default=False)
saldo_inicial = fields.Float('Saldo Deudor Inicial', readonly=True, help='Saldo del Deudor del Cliente a la Fecha de esta Acción de Cobro', digits=(12, 2))
fecha_vencimiento = fields.Datetime('Fecha de Vencimiento', readonly=True, help='Fecha de vencimiento de la promesa de pago')
saldo_deudor_vencimiento = fields.Float('Saldo Deudor a la Fecha de Vencimiento', readonly=True, digits=(12, 2))
fecha_cerrado = fields.Datetime('Fecha de Cierre', readonly=True)
saldo_deudor_cerrado = fields.Float('Saldo Deudor', readonly=True, digits=(12, 2))
saldo_favor_cerrado = fields.Float('Saldo a favor', readonly=True, digits=(12, 2))
saldo_deudor_cuenta = fields.Float(string='Saldo Deudor', compute='establecer_saldo', store=True, digits=(12, 2))
@api.onchange('partner_id')
def _onchange_limpiar_partner_id(self):
self.cuenta_id = ''
def _cron_validar_fecha(self):
acciones_vencidas = self.env['sgt_cobros_acciones'].search([('fecha_promesa_pago', '<=', datetime.now()), ('state', '=', 'activo')])
for ids in acciones_vencidas:
ids.write({'vencido': True})
ids.write({'state': 'vencido'})
ids.write({'fecha_vencimiento': datetime.now()})
ids.write({'saldo_deudor_vencimiento': ids.cuenta_id.saldo_deudor})
@api.model
def create(self, values):
contribuyente = self.env['sgt_cuentas'].browse(values['cuenta_id'])
values.update({'saldo_inicial': contribuyente.saldo_deudor})
values.update({'codigo': self.env['ir.sequence'].next_by_code('sgt_cobros_acciones')})
return super(SgtCobrosAcciones, self).create(values)
@api.multi
@api.depends('cuenta_id')
def establecer_saldo(self):
for accion in self:
accion.saldo_deudor_cuenta = accion.cuenta_id.saldo_deudor
@api.multi
def accion_cerrada(self):
if (self.state == 'activo' or self.state == 'vencido'):
self.fecha_cerrado = datetime.now()
if self.saldo_deudor_cuenta > 0:
self.saldo_deudor_cerrado = self.saldo_deudor_cuenta
else:
self.saldo_favor_cerrado = self.saldo_deudor_cuenta
self.state = 'cerrado'
class SgtCarteraCobranzas(models.Model):
_name = 'sgt_cartera_cobranza'
_rec_name = 'codigo'
codigo = fields.Char('Código')
estatus = fields.Selection(ls_estatus_cobranza, 'Estatus')
fecha_cerrado = fields.Datetime('Fecha de Cerrar Cartera')
descripcion = fields.Char('Descripción')
generado = fields.Boolean('Generada')
tipo_morosidades = fields.Many2one('sgt_tipos_morosidades', 'Tipos de Morosidades')
cuenta_ids = fields.Many2many('sgt_cuentas', 'aportant_cartera_rel', 'cartera_id', 'cuenta_id', string='Aportantes')
@api.multi
def generar_cartera(self):
declaraciones = self.env['sgt_declaraciones'].search([('id', '>', 0)])
cuentas = self.env['sgt_cuentas'].search([('id', '>', 0)])
if self.tipo_morosidades.codigo == '01':
for declaracion in declaraciones:
for cuenta in cuentas:
if cuenta.partner_id.id == declaracion.partner_id.id:
pass
else:
self.cuenta_ids = [(4, cuenta.id, None)]
self.estatus = 'activo'
self.generado = True
elif self.tipo_morosidades.codigo == '02':
for cuenta in cuentas:
if cuenta.saldo_deudor < 0:
self.cuenta_ids = [(4, cuenta.id, None)]
else:
pass
self.estatus = 'activo'
self.generado = True
elif self.tipo_morosidades.codigo == '03':
for cuenta in cuentas:
if cuenta.credito_fiscal > 0:
self.cuenta_ids = [(4, cuenta.id, None)]
else:
pass
self.estatus = 'activo'
self.generado = True
@api.multi
def cerrar_cartera(self):
self.fecha_cerrado = datetime.now()
self.estatus = 'cerrado'
@api.model
def create(self, values):
values.update({'codigo': self.env['ir.sequence'].next_by_code('sgt_cartera_cobranza')})
return super(SgtCarteraCobranzas, self).create(values)
class SgtTiposMorosidades(models.Model):
_name = 'sgt_tipos_morosidades'
codigo = fields.Char('Código', size=2)
descripcion = fields.Char('Descripción')
@api.multi
@api.depends('codigo', 'descripcion')
def name_get(self):
result = []
for registro in self:
name = str(registro.codigo) + ' ' + str(registro.descripcion)
result.append((registro.id, name))
return result
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment