Guardar factura

This commit is contained in:
Juan Pablo Vial
2025-02-03 22:17:57 -03:00
parent 71615050f3
commit 59a28a353b
11 changed files with 296 additions and 122 deletions

View File

@ -89,11 +89,11 @@
rut: () => {
return [
'<div class="four wide column">',
'<div class="ui center aligned red segment">',
'<div class="ui center aligned orange segment">',
'<strong>',
`RUT:${this.props.emisor.rut.toUpperCase()}<br/>`,
'FACTURA ELECTRÓNICA<br/>',
`N° #${this.props.venta.id}${this.props.index}`,
`<span class="ui red text">N° ${this.props.venta.id}${this.props.index}</span>`,
'</strong>',
'</div>',
'</div>'
@ -128,34 +128,34 @@
table: ({formatters}) => {
return [
'<div class="row">',
'<table class="ui celled table">',
'<thead>',
'<tr class="grey">',
'<th class="center aligned" colspan="6">DETALLES</th>',
'</tr>',
'<tr class="grey">',
'<th>N°</th>',
'<th class="center aligned">Descripción</th>',
'<th class="center aligned">Cant/Unidad</th>',
'<th class="center aligned">Prec. Unit.</th>',
'<th class="center aligned">Ind</th>',
'<th class="center aligned">Total</th>',
'</tr>',
'</thead>',
'<tbody>',
this.draw().unidades({formatters}),
'</tbody>',
'<tfoot>',
'<tr>',
'<td colspan="6">',
'<br />',
'<br />',
'<br />',
'<br />',
'</td>',
'</tr>',
'</tfoot>',
'</table>',
'<table class="ui celled table">',
'<thead>',
'<tr class="grey">',
'<th class="center aligned" colspan="6">DETALLES</th>',
'</tr>',
'<tr class="grey">',
'<th>N°</th>',
'<th class="center aligned">Descripción</th>',
'<th class="center aligned">Cant/Unidad</th>',
'<th class="center aligned">Prec. Unit.</th>',
'<th class="center aligned">Ind</th>',
'<th class="center aligned">Total</th>',
'</tr>',
'</thead>',
'<tbody>',
this.draw().unidades({formatters}),
'</tbody>',
'<tfoot>',
'<tr>',
'<td colspan="6">',
'<br />',
'<br />',
'<br />',
'<br />',
'</td>',
'</tr>',
'</tfoot>',
'</table>',
'</div>'
].join("\n")
},
@ -279,7 +279,7 @@
'<div class="row">',
'<div class="fourteen wide column"></div>',
'<div class="two wide center aligned column">',
'<div class="ui green message">',
`<div class="ui green message guardar" data-index="${this.props.index}">`,
'<i class="check icon"></i>',
'Guardada',
'</div>',
@ -300,14 +300,30 @@
watch() {
return {
save: () => {
document.querySelector(`button[data-index="${this.props.index}"]`).addEventListener('click', clickEvent => {
document.querySelector(`.guardar[data-index="${this.props.index}"]`).addEventListener('click', clickEvent => {
const index = clickEvent.currentTarget.getAttribute('data-index')
facturas.save().factura(index)
facturas.venta.save().factura({index: index - 1})
})
}
}
}
validate() {
if (this.props.venta.id === null || typeof this.props.venta.id === 'undefined') {
return false
}
if (this.props.index === null || typeof this.props.index === 'undefined') {
return false
}
if (this.props.proporcion === null || typeof this.props.proporcion === 'undefined') {
return false
}
return !(this.props.receptor.rut === '' || this.props.receptor.nombre === '' || this.props.receptor.direccion === '' || this.props.receptor.comuna === '');
}
save() {
if (!this.validate()) {
return
}
let url = '{{$urls->api}}/ventas/facturas/add'
if (this.saved) {
url = `{{$urls->api}}/ventas/facturas/${this.props.id}/edit`
@ -326,6 +342,7 @@
body.set('detalle', JSON.stringify(this.props.detalle))
body.set('total', JSON.stringify(this.props.total))
body.set('uf', JSON.stringify({fecha: [this.props.uf.fecha.getFullYear(), this.props.uf.fecha.getMonth()+1, this.props.uf.fecha.getDate()].join('-'), valor: this.props.uf.valor}))
return APIClient.fetch(url, {method, body}).then(response => {
if (!response) {
return
@ -366,7 +383,7 @@
unidades.forEach(unidad => {
this.props.unidades.push({
unidad: unidad,
descripcion: unidad.descripcion(this.props.proporcion),
descripcion: unidad.changeDescripcion(this.props.proporcion || 1),
precio: unidad.props.valor * this.props.uf.valor * this.props.proporcion,
prorrateo: unidad.props.prorrateo * this.props.proporcion
})
@ -376,10 +393,10 @@
this.props.proporcion = propietario.props.proporcion
this.props.receptor = {
rut: propietario.props.rut,
nombre: propietario.props.nombre,
direccion: propietario.props.direccion,
comuna: propietario.comuna
rut: propietario.props.rut ?? '',
nombre: propietario.props.nombre ?? '',
direccion: propietario.props.direccion ?? '',
comuna: propietario.comuna ?? ''
}
}
}

View File

@ -14,7 +14,11 @@
}
get comuna() {
return $('#comuna_propietario'+this.props.index).dropdown('get text') ?? this.props.comuna
const comuna = $('#comuna_propietario'+this.props.index).dropdown('get text')
if (typeof comuna === 'string') {
return comuna
}
return this.props.comuna ?? ''
}
update() {
return {

View File

@ -13,8 +13,8 @@
this.props = props
}
descripcion(proporcion = 1) {
return [this.props.tipo, this.props.descripcion, `[UF ${facturas.formatters.ufs.format(this.props.valor * proporcion)}]`].join(' ')
changeDescripcion(proporcion = 1) {
return this.descripcion = [this.props.tipo, this.props.descripcion, `[UF ${facturas.formatters.ufs.format(this.props.valor * proporcion)}]`].join(' ')
}
update() {
return {

View File

@ -252,6 +252,11 @@
this.props.propietarios.forEach(propietario => {
propietario.watch().propietario()
})
},
facturas: () => {
this.props.facturas.facturas.forEach(factura => {
factura.watch().save()
})
}
}
}
@ -267,11 +272,11 @@
value: ufFormatter => {
return [
'<div class="ui grid">',
'<div class="three wide column">',
'<div class="ui very segment">',
'Valor Venta: UF ' + ufFormatter.format(this.props.valor),
'</div>',
'</div>',
'<div class="three wide column">',
'<div class="ui very segment">',
'Valor Venta: UF ' + ufFormatter.format(this.props.valor),
'</div>',
'</div>',
'</div>'
].join("\n")
},
@ -377,7 +382,7 @@
},
facturas: formatters => {
const output = []
this.props.facturas.facturas.forEach((factura, index) => {
this.props.facturas.facturas.forEach(factura => {
output.push(factura.draw().factura({formatters}))
})
return output.join("\n")
@ -405,10 +410,10 @@
comuna: this.props.inmobiliaria.comuna
},
receptor: {
rut: '',
nombre: '',
direccion: '',
comuna: ''
rut: propietario.props.rut ?? '',
nombre: propietario.props.nombre ?? '',
direccion: propietario.props.direccion ?? '',
comuna: propietario.props.comuna ?? ''
},
unidades: [],
detalle: {