123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578 |
- function report_purchases (reporting){
- "use strict";
-
- var instance = openerp;
- reporting.ReportPurchasesWidget = reporting.Base.extend({
- template: 'ReportPurchases',
- invoice: [],
- Currency:[],
- resCurrency :[],
- resCompany:[],
- accountJournal:[],
- supplier:[],
- newInvoice:[],
- newCabecera:[],
- rowsData :[],
- events:{
- 'change #current-period' : 'factSearch',
- 'click #txt' : 'generarTxt',
- 'click .download' : 'downloadAttachment',
- 'click .preview' : 'previewAttachment'
- },
- // Init
- init : function(parent){
- this._super(parent);
- },
- // start
- start: function () {
- var self = this;
- var table = this.$el.find('#table');
- table.bootstrapTable(
- {data : self.rowsData}
- );
- this.submitForm();
- },
- // Consultar
- submitForm: function () {
- var self = this;
- self.fetchPeriod().then(function(period) {
- return period;
- }).then(function (period) {
- self.period = period;
- self.$el.find('#current-period').append('<option value="9999999">Todos los períodos</option>');
- _.each(period, function (item) {
- self.$el.find('#current-period').append('<option value="' + item.id + '">' + item.name + '</option>');
- });
- return self.fetchJournal();
- }).then(function (journal) {
- self.accountJournal =journal;
- return self.fetchInvoiceP2();
- }).then(function (invoice){
- self.invoice = invoice;
- return self.fetchSupplier(invoice);
- }).then(function (supplier){
- self.supplier=supplier;
- return self.fetchPaymentTerm();
- }).then(function (paymentTerm){
- self.paymentTerm=paymentTerm;
- return self.fetchAttachment();
- }).then(function(attachment){
- self.attachment=attachment;
- return self.fecthComanyCurrency();
- }).then(function(resCompany){
- self.resCompany = resCompany;
- self.inicializarBuscadorsup();
- return self.fect_generar(self.invoice);
- }).then(function(currency){
- self.currency = currency;
- // return self.fect_cabecera(self.resCompany, self.newInvoice);
- });
- },
- // Buscar Diario
- fetchJournal: function () {
- var self = this;
- var defer = $.Deferred();
- var Journal = new instance.web.Model('account.journal');
- Journal.query(['id', 'name']).filter([['type', '=', ['purchase','purchase_refund']]]).all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- // Periodo
- fetchPeriod: function () {
- var defer = $.Deferred();
- var period = new instance.web.Model('account.period');
- var fields = ['id', 'name'];
- var domain = [['special', '!=', true]];
- period.query(fields).filter(domain).all().then(function (results) {
- defer.resolve(results);
- });
- return defer;
- },
- // Invoice (FACTURAS)
- fetchInvoiceP2: function () {
- var journal_ids = _.flatten(_.map(this.accountJournal, function (item) {
- return item.id;
- }));
- var filter =[['state', 'in',['open','paid']],['type', '=', ['in_invoice','in_refund']],['journal_id', 'in',journal_ids]];
- var field =['id', 'type', 'number', 'origin', 'state', 'journal_id', 'currency_id', 'supplier_invoice_number','date_invoice','partner_id','amount_total','user_id','contado','credito','payment_term','period_id','amount_untaxed','amount_tax','attachment_ids','timbrado'];
- var defer = $.Deferred();
- var Invoice = new instance.web.Model('account.invoice');
- Invoice.query(field).filter(filter).all().then(function (results) {
- defer.resolve(results);
- });
- return defer;
- },
- // company_curency
- fecthComanyCurrency: function(){
- var self = this;
- var defer = $.Deferred();
- var currency = new instance.web.Model('res.company');
- var field=['id', 'currency_id','exportador','agent_ruc','legal_agent','company_ruc','name','juridico'];
- var domain=[['id','=',1]];
- currency.query(field).filter(domain).all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- // Partner (Proveeedor)
- fetchSupplier: function() {
- var self = this;
- var defer = $.Deferred();
- var supplier = new instance.web.Model('res.partner');
- supplier.query(['id', 'name', 'ruc', 'active', 'supplier']).filter([['active', '=', true], ['supplier', '=', true]]).all().then(function (results) {
- defer.resolve(results);
- });
- return defer;
- },
- // Archivos Adjuntos
- fetchAttachment: function() {
- var self = this;
- var defer = $.Deferred();
- var id = _.flatten(_.map(self.invoice,function(map){
- return id;
- }));
- var attachment = new instance.web.Model('ir.attachment');
- attachment.query(['id','res_id', 'datas', 'res_model','file_type','name']).filter([['res_model', '=','account.invoice']]).all().then(function (results) {
- defer.resolve(results);
- });
- return defer;
- },
- // Plazos de pagos
- fetchPaymentTerm: function () {
- var self = this;
- var defer = $.Deferred();
- var payment_term = _.flatten(_.map(self.invoice,function(map){
- return map.payment_term[0];
- }));
- var paymentTerm = new instance.web.Model('account.payment.term');
- paymentTerm.query(['id','name','line_ids']).filter([['id', '=', payment_term]]).all().then(function(results){
- defer.resolve(results);
- });
- return defer;
- },
- // Verificar si los Valores no son nulos
- valorNull:function(dato){
- var valor ="";
- if (dato){
- valor=dato;
- }
- return valor;
- },
- // Buscador
- inicializarBuscadorsup: function () {
- var self = this;
- var results = self.supplier;
- results = _.map(results, function (item) {
- return {
- label: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc),
- value: item.id + '-'+ item.name + ' ' + self.valorNull(item.ruc)
- }
- });
- self.$('#customer').autocomplete({
- source: results,
- minLength:0,
- search: function(event, ui) {
- if (!(self.$('#customer').val())){
- self.factSearch();
- }
- },
- close: function( event, ui ) {
- self.factSearch();
- },
- select: function(event, ui) {
- self.factSearch();
- }
- });
- },
- getSupplier : function(partner_id){
- var self = this;
- return _.filter(self.supplier,function(item){
- return item.id === partner_id;
- }).shift();
- },
- getPaymentTerm : function(id){
- var self = this;
- return _.filter(self.paymentTerm,function(item){
- return item.id === id;
- }).shift();
- },
- getAttachment : function(attachment_ids){
- var self = this;
- return _.filter(self.attachment,function(item){
- return item.id === attachment_ids;
- }).shift();
- },
- // Detalle del registro
- fect_generar: function(invoices){
- var self = this;
- var data = [];
- var supplier_ruc;
- var ruc;
- var cuota;
- var tipo;
- var tasa_10 = 0;
- var tasa_5 = 0;
- var iva_5 = 0;
- var iva_10 = 0;
- var IVA = 0;
- var TAX = 0;
- var adjunto;
- var untaxed;
- var condicion;
- var contador = 0;
- var icons = 0;
- var imagen;
- var img;
- _.each(invoices, function(invoice){
- // Obtener el ruc y el DV del proveedor
- supplier_ruc = self.getSupplier(invoice.partner_id[0]);
- ruc = supplier_ruc.ruc.split("-");
- // Determinar si la factura es a credito o al contado.
- condicion = 1;
- if (invoice.credito == true){
- condicion = 2;
- }
- // Determinar la cantidad de cuotas.
- cuota = _.flatten(self.getPaymentTerm(invoice.payment_term[0])).length - 2;
- // Validar. Si la factura es al contado, la cuota debe ser cero.
- if (condicion == 1 || cuota < 1){
- cuota = 0;
- }
- // Determinar el tipo de factura.
- if(invoice.type == 'in_invoice'){
- tipo = 1;
- }else{
- tipo = 2;
- }
- // Manejo de impuestos
- IVA = accounting.formatNumber(((invoice.amount_untaxed * 10)/100),"","");
- TAX = accounting.formatNumber(invoice.amount_tax,"","");
- untaxed = 0;
- iva_5 = 0;
- iva_10 = 0;
- tasa_10 = 0;
- tasa_5 = 0;
- // Determinar si fue aplicado algun impuesto a la factura.
- if(invoice.amount_total == invoice.amount_untaxed){
- untaxed = accounting.formatNumber(invoice.amount_untaxed,"","");
- }else{
- // Si fue aplicado impuesto, determina si fue de 10% o 5%.
- if(IVA == TAX){
- iva_10 = accounting.formatNumber(invoice.amount_tax,"","");;
- tasa_10 = accounting.formatNumber(invoice.amount_untaxed,"","");
- }else{
- iva_5 = accounting.formatNumber(invoice.amount_tax,"","");;
- tasa_5 = accounting.formatNumber(invoice.amount_untaxed,"","");
- }
- }
- // Obtener binario del archivo adjunto
- adjunto = self.getAttachment(invoice.attachment_ids[0]);
- imagen = _.flatten(adjunto);
- // Obtener el tipo de adjunto
- if(adjunto == undefined){
- icons = '<a class="" href="javascript:void(0)" title="Descarga no disponible"><i class="fa fa-file fa-lg" aria-hidden="true"></i></a> <a class="" href="javascript:void(0)" title="Vista previa no disponible"><i class="fa fa-eye-slash fa-lg" aria-hidden="true"></i></a>';
- }else{
- if(imagen[1]=='image/png' || imagen[1]=='image/jpeg'){
- icons = '<a class="download" href="javascript:void(0)" title="Descargar"><i class="fa fa-download fa-lg" aria-hidden="true"></i></a> <a class="preview" title="Vista previa"><i class="fa fa-eye fa-lg" aria-hidden="true"></i></a>';
- }else{
- icons = '<a class="download" href="javascript:void(0)" title="Descargar"><i class="fa fa-download fa-lg" aria-hidden="true"></i></a> <a class="" href="javascript:void(0)" title="Vista previa no disponible"><i class="fa fa-eye-slash fa-lg" aria-hidden="true"></i></a>';
- }
- }
- // Indice de la tabla
- contador += 1;
- // Crear el objeto que se muestra en la tabla
- data.push({
- linea: contador,
- tipo_registro: 2,
- ruc_proveedor: ruc[0],
- dv: ruc[1],
- partner : invoice.partner_id[1],
- supplier_invoice_number: self.valorNull(invoice.timbrado),
- tipo_documento : tipo,
- number: self.valorNull(invoice.supplier_invoice_number),
- date: moment(invoice.date_invoice).format("DD/MM/YYYY"),
- tasa_10 : tasa_10,
- iva_10 : iva_10,
- tasa_5 : tasa_5,
- iva_5 : iva_5,
- amount_untaxed: untaxed,
- tipo_operacion : 8,
- condicion_compra : condicion,
- cantidad_cuotas : cuota,
- period_id : invoice.period_id[0],
- period_name : invoice.period_id[1],
- attachment_ids : adjunto,
- download_icon : icons,
- });
- });
- self.newInvoice = data;
- this.loadTable(data);
- },
- // Informacion para el txt.
- fect_cabecera: function(resCompanys, invoices){
- var self = this;
- // Cabecera
- var datos = [];
- var company_ruc;
- var agent_ruc;
- var version = 2;
- var total = 0;
- var cantidad = 0;
- var valor = 0;
- var periodo;
- var ruc_agente = 0;
- var dv_agente = 0;
- var nombre_agente = 0;
- var period =this.$el.find('#current-period').val();
- _.each(resCompanys, function(resCompany){
- // Obtener el RUC y el DV de la compania
- company_ruc = resCompany.company_ruc.split("-");
- // Determinar si la persona es fisica o juridica
- if(resCompany.juridico == true){
- agent = resCompany.agent_ruc.split("-");
- ruc_agente = agent[0];
- dv_agente = agent[1];
- nombre_agente = resCompany.legal_agent;
- }
- // Tipo de registro
- datos.push(1);
- datos.push('\t');
- // Periodo
- datos.push(201708);
- // moment(periodo).format("YYYYMM")
- datos.push('\t');
- // Tipo de reporte
- datos.push(1);
- datos.push('\t');
- // Codigo Obligacion
- datos.push(911);
- datos.push('\t');
- // Codigo Formulario
- datos.push(211);
- datos.push('\t');
- // Ruc agente de informacion
- datos.push(company_ruc[0]);
- datos.push('\t');
- // DV agente de informacion
- datos.push(company_ruc[1]);
- datos.push('\t');
- // Nombre o denominacion del agente de informacion
- datos.push(resCompany.name);
- datos.push('\t');
- // Ruc representante legal
- datos.push(ruc_agente);
- datos.push('\t');
- // DV representante legal
- datos.push(dv_agente);
- datos.push('\t');
- // Nombre y apellido de representante legal
- datos.push(nombre_agente);
- datos.push('\t');
- // Cantidad de registros
- datos.push(50);
- datos.push('\t');
- // Monto total
- datos.push(2654122);
- datos.push('\t');
- // Exportador
- datos.push(resCompany.exportador);
- datos.push('\t');
- // Version
- datos.push(version);
- datos.push('\r\n');
- });
-
- // detalles
- _.each(invoices, function(newInvoice){
- if(newInvoice.period_id == period){
- // tipo de registro
- datos.push(newInvoice.tipo_registro);
- datos.push('\t');
- // ruc del proveedor
- datos.push(newInvoice.ruc_proveedor);
- datos.push('\t');
- // dv del proveedor
- datos.push(newInvoice.dv);
- datos.push('\t');
- // Nombre o denominacion del proveedor
- datos.push(newInvoice.partner);
- datos.push('\t');
- // Numero de timbrado
- datos.push(newInvoice.supplier_invoice_number);
- datos.push('\t');
- // Tipo de documento
- datos.push(newInvoice.tipo_documento);
- datos.push('\t');
- // Numero de documento
- datos.push(newInvoice.number);
- datos.push('\t');
- // Fecha de documento
- datos.push(newInvoice.date);
- datos.push('\t');
- // Monto de la compra a la tasa 10%
- datos.push(newInvoice.tasa_10);
- datos.push('\t');
- // IVA credito 10%
- datos.push(newInvoice.iva_10);
- datos.push('\t');
- // Monto de la compra a la tasa 5%
- datos.push(newInvoice.tasa_5);
- datos.push('\t');
- // IVA credito 5%
- datos.push(newInvoice.iva_5);
- datos.push('\t');
- // Monto de la compra no gravada o exenta
- datos.push(newInvoice.amount_untaxed);
- datos.push('\t');
- // Tipo de operacion
- datos.push(newInvoice.tipo_operacion);
- datos.push('\t');
- // Condicion de compra
- datos.push(newInvoice.condicion_compra);
- datos.push('\t');
- // Cantidad de cuotas
- datos.push(newInvoice.cantidad_cuotas);
- datos.push('\r\n');
- // Catidad de registros
- cantidad += 1;
- valor = parseInt(newInvoice.amount_untaxed) + parseInt(newInvoice.tasa_5) + parseInt(newInvoice.tasa_10);
- total += valor;
- periodo = newInvoice.period_name.split("/");
- }
- });
- datos.splice(2,0);
- datos[2] = periodo[1] + periodo[0];
- datos.splice(22,0);
- datos[22] = cantidad;
- datos.splice(24,0);
- datos[24] = accounting.formatNumber(total,"","");
- self.newCabecera = new Blob(datos, {type: 'text/plain'});
- },
- // Buscar
- factSearch: function(){
- var self = this;
- var period =this.$el.find('#current-period').val();
- var newInvoice = self.newInvoice;
- // Buscar por Periodo
- if (period != 9999999){
- newInvoice=_.filter(newInvoice, function (inv){
- return inv.period_id == period;
- });
- }
- self.loadTable(newInvoice)
- },
- // cargara la tabla
- loadTable:function(rowsTable){
- var self = this;
- self.rowsData = rowsTable;
- var table = this.$el.find('#table');
- table.bootstrapTable('load',rowsTable);
- },
- // Generar el txt con el nombre correspondiente
- generarTxt: function () {
- var self = this;
- var newInvoice = self.newInvoice;
- var period =this.$el.find('#current-period').val();
- if (period != 9999999){
- newInvoice=_.filter(newInvoice, function (inv){
- return inv.period_id == period;
- });
- if(newInvoice.length != 0){
- var periodo = newInvoice[0].period_name.split("/");
- var fileName = "Compras " + periodo[1] + periodo[0];
- self.fect_cabecera(self.resCompany, self.newInvoice);
- download(self.newCabecera, fileName, "text/plain");
- }else{
- self.showMensajeRegistro();
- }
- }else{
- self.showMensaje();
- }
- },
- // Descargar el archivo adjunto
- downloadAttachment: function (e) {
- var self = this;
- var newInvoice = self.newInvoice;
- var fila = $(e.target).closest('tr');
- var columnas = fila.children();
- var orden = parseInt(columnas[0].textContent);
- var dato = newInvoice[orden - 1].attachment_ids;
- download("data:"+dato.file_type+";base64,"+dato.datas+"",dato.name,dato.file_type);
- },
- // Vista previa del archivo
- previewAttachment: function (e) {
- var self = this;
- var newInvoice = self.newInvoice;
- var fila = $(e.target).closest('tr');
- var columnas = fila.children();
- var orden = parseInt(columnas[0].textContent);
- var dato = newInvoice[orden -1].attachment_ids;
- var img = 'data:'+dato.file_type+';base64,'+dato.datas;
- lightbox.option({
- 'showImageNumberLabel': false
- });
- $(".preview").attr("data-lightbox",dato.name);
- $(".preview").attr("href",img);
- },
- // Lanzar el mensaje de pediodo
- showMensaje : function(modelos){
- var self = this;
- $("#dialog" ).dialog({
- autoOpen: true,
- resizable: false,
- modal: true,
- title: 'Atención',
- width: 500,
- open: function() {
- $(this).html('Debe elegir un periodo');
- },
- show: {
- effect: "fade",
- duration: 200
- },
- hide: {
- effect: "fade",
- duration: 200
- },
- buttons: {
- Aceptar: function() {
- $(this).dialog('close');
- }
- }
- });
- return
- },
- // Lanzar mensaje de registros
- showMensajeRegistro : function(modelos){
- var self = this;
- $("#dialog" ).dialog({
- autoOpen: true,
- resizable: false,
- modal: true,
- title: 'Atención',
- width: 500,
- open: function() {
- $(this).html('No hay registros que exportar');
- },
- show: {
- effect: "fade",
- duration: 200
- },
- hide: {
- effect: "fade",
- duration: 200
- },
- buttons: {
- Aceptar: function() {
- $(this).dialog('close');
- }
- }
- });
- return
- },
- });
- }
|