FIX: mapping of prices import
New template with filled units
This commit is contained in:
@ -13,13 +13,19 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui two column grid">
|
||||
<div class="ui three column grid">
|
||||
<div class="column">
|
||||
<button class="ui button" id="import_template">
|
||||
<i class="file icon"></i>
|
||||
Descargar plantilla
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui checkbox import_filled">
|
||||
<input type="checkbox" name="filled" />
|
||||
<label>¿Con unidades del proyecto?</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui radio checkbox import_format">
|
||||
<input type="radio" name="format" value="csv" />
|
||||
@ -58,26 +64,23 @@
|
||||
class ImportTemplate {
|
||||
ids = {
|
||||
button: '',
|
||||
filled: '',
|
||||
format: ''
|
||||
}
|
||||
components = {
|
||||
button: null,
|
||||
$filled: null,
|
||||
$format: null
|
||||
}
|
||||
data = {
|
||||
filename: '',
|
||||
filled: false,
|
||||
format: '',
|
||||
columns: [],
|
||||
csv: {
|
||||
separator: '',
|
||||
},
|
||||
}
|
||||
buildData() {
|
||||
const data = []
|
||||
data.push(this.data.columns.map(column => column.charAt(0).toUpperCase() + column.slice(1)))
|
||||
data.push(this.data.columns.map(column => ''))
|
||||
return data
|
||||
}
|
||||
download(event) {
|
||||
event.preventDefault()
|
||||
|
||||
@ -91,9 +94,7 @@
|
||||
return false
|
||||
}
|
||||
downloadCsv() {
|
||||
const data = []
|
||||
data.push(Object.keys(this.data.columns))
|
||||
data.push(Object.values(this.data.columns))
|
||||
const data = this.buildCsvData()
|
||||
const blob = new Blob([data.map(row => row.join(this.data.csv.separator)).join('\n')], {type: 'text/csv'})
|
||||
const url = URL.createObjectURL(blob)
|
||||
const a = document.createElement('a')
|
||||
@ -104,12 +105,43 @@
|
||||
}
|
||||
downloadXlsx() {
|
||||
const workbook = XLSX.utils.book_new()
|
||||
const worksheet = XLSX.utils.json_to_sheet([this.data.columns])
|
||||
const worksheet = XLSX.utils.json_to_sheet(this.buildData())
|
||||
XLSX.utils.book_append_sheet(workbook, worksheet, 'Plantilla de Precios')
|
||||
XLSX.writeFile(workbook, this.data.filename + '.xlsx', { compression: true })
|
||||
}
|
||||
buildData() {
|
||||
const data = [this.data.columns]
|
||||
if (this.data.filled) {
|
||||
const dateFormatter = new Intl.DateTimeFormat('es-CL')
|
||||
const date = precios.components.modals.import.components.$calendar.calendar('get date')
|
||||
precios.data.precios.forEach(tipologia => {
|
||||
tipologia.lineas.forEach(linea => {
|
||||
linea.unidades.forEach(unidad => {
|
||||
data.push({
|
||||
'Fecha*': date ? dateFormatter.format(date) : '',
|
||||
'Proyecto*': precios.data.proyecto,
|
||||
'Tipo*': tipologia.tipo,
|
||||
Unidad: unidad.nombre,
|
||||
Valor: ''
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
return data
|
||||
}
|
||||
buildCsvData() {
|
||||
const data = this.buildData()
|
||||
const output = []
|
||||
output.push(Object.keys(data[0]))
|
||||
data.forEach(row => {
|
||||
output.push(Object.values(row))
|
||||
})
|
||||
return output
|
||||
}
|
||||
constructor() {
|
||||
this.ids.button = 'import_template'
|
||||
this.ids.filled = 'import_filled'
|
||||
this.ids.format = 'import_format'
|
||||
|
||||
this.data.filename = 'Plantilla de Precios'
|
||||
@ -129,6 +161,16 @@
|
||||
this.components.button = document.getElementById(this.ids.button)
|
||||
this.components.button.addEventListener('click', this.download.bind(this))
|
||||
|
||||
this.components.$filled = $(`.${this.ids.filled}`)
|
||||
this.components.$filled.checkbox({
|
||||
fireOnInit: true,
|
||||
onChange: () => {
|
||||
const checkbox = this.components.$filled.find('[name="filled"]').toArray()[0]
|
||||
this.data.filled = checkbox.checked
|
||||
}
|
||||
})
|
||||
this.components.$filled.checkbox('set unchecked')
|
||||
|
||||
this.components.$format = $(`.${this.ids.format}`)
|
||||
this.components.$format.checkbox({
|
||||
fireOnInit: true,
|
||||
|
||||
@ -5,14 +5,14 @@ use DateTime;
|
||||
use Exception;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Incoviba\Common\Ideal\Controller;
|
||||
use Incoviba\Common\Implement\Exception\{EmptyRedis,EmptyResult};
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Incoviba\Controller\API\{withJson,emptyBody};
|
||||
use Incoviba\Controller\withRedis;
|
||||
use Incoviba\Exception\ServiceAction\Create;
|
||||
use Incoviba\Service;
|
||||
|
||||
class Precios
|
||||
class Precios extends Controller
|
||||
{
|
||||
use withJson, emptyBody, withRedis;
|
||||
|
||||
@ -56,7 +56,6 @@ class Precios
|
||||
}
|
||||
|
||||
public function import(ServerRequestInterface $request, ResponseInterface $response,
|
||||
LoggerInterface $logger,
|
||||
Service\Venta\Precio $precioService): ResponseInterface
|
||||
{
|
||||
$body = $request->getParsedBody();
|
||||
@ -79,7 +78,7 @@ class Precios
|
||||
$output['total'] = count($output['precios']);
|
||||
$output['status'] = true;
|
||||
} catch (Create | Exception $exception) {
|
||||
$logger->warning($exception);
|
||||
$this->logger->warning($exception);
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user