Skip to content

Commit cc542e9

Browse files
committed
duplicazione ordini e prenotazioni. closes #350
1 parent c70af34 commit cc542e9

31 files changed

Lines changed: 543 additions & 255 deletions

code/app/Helpers/Formatters.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ function output_csv($filename, $head, $contents, $format_callback, $out_file = n
113113
}
114114
}
115115

116-
fclose($fh);
116+
fflush($fh);
117+
$test = fclose($fh);
118+
if ($test == false) {
119+
\Log::warning('Errore chiudendo il file formattato in CSV');
120+
}
117121
};
118122

119123
if (is_null($out_file)) {

code/app/Http/Controllers/ImportController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ public function postCsv(Request $request)
3636
try {
3737
switch ($step) {
3838
case 'guess':
39-
$parameters = $importer->guess($request);
39+
$parameters = $importer->guess($request->all());
4040
$return = view('import.csvsortcolumns', $parameters);
4141
break;
4242

4343
case 'select':
4444
try {
45-
$parameters = $importer->select($request);
45+
$parameters = $importer->select($request->all());
4646
$return = $importer->formatSelect($parameters);
4747
}
4848
catch (MissingFieldException $e) {
@@ -56,7 +56,7 @@ public function postCsv(Request $request)
5656
break;
5757

5858
case 'run':
59-
$parameters = $importer->run($request);
59+
$parameters = $importer->run($request->all());
6060
$return = view($importer->finalTemplate(), $parameters);
6161
break;
6262

code/app/Http/Controllers/OrdersController.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,4 +309,18 @@ public function document(Request $request, $id, $type)
309309
return $ret;
310310
}
311311
}
312+
313+
public function advanced(Request $request, $id)
314+
{
315+
$order = Order::findOrFail($id);
316+
return view('order.partials.advanced', [
317+
'order' => $order,
318+
]);
319+
}
320+
321+
public function duplicate(Request $request, $id)
322+
{
323+
$order = $this->service->duplicate($id, $request->all());
324+
return $this->commonSuccessResponse($order->aggregate);
325+
}
312326
}

code/app/Importers/CSV/CSVImporter.php

Lines changed: 76 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -20,25 +20,25 @@ public function extraInformations()
2020
return null;
2121
}
2222

23-
/*
24-
Come parametro di questa funzione si usa il nome della sotto-classe di
25-
CSVImporter che si intende usare, scritto tutto minuscolo
26-
*/
23+
/**
24+
* Come parametro di questa funzione si usa il nome della sotto-classe di
25+
* CSVImporter che si intende usare, scritto tutto minuscolo
26+
*/
2727
public static function getImporter($type)
2828
{
2929
$classname = 'App\\Importers\\CSV\\' . ucwords($type);
3030
return new $classname();
3131
}
3232

33-
private function startReader(Request $request, string $path)
33+
private function startReader(array $request, string $path)
3434
{
3535
$reader = Reader::from($path, 'r');
3636
$options = Info::getDelimiterStats($reader, [',', ';', "\t"]);
3737
arsort($options);
3838
$target_separator = array_keys($options)[0];
3939
$reader->setDelimiter($target_separator);
4040

41-
$skip = $request->has('skip_header');
41+
$skip = isset($request['skip_header']);
4242
if ($skip) {
4343
$reader->setHeaderOffset(0);
4444
}
@@ -47,83 +47,90 @@ private function startReader(Request $request, string $path)
4747
return $reader;
4848
}
4949

50+
/**
51+
* Se la sotto-classe specifica un attributo "sorted_fields" tra i
52+
* parametri, pre-popolo l'array dei campi selezionati in fase di
53+
* revisione del CSV. Questo viene usato, ad esempio, dall'importer
54+
* "Products" per inizializzare l'importazione dei prodotti di un certo
55+
* fornitore usando sempre le stesse colonne (anziché doverle
56+
* riassegnare a mano ogni volta)
57+
*/
58+
private function retrievePreSortedFields($parameters)
59+
{
60+
$selected = [];
61+
$sorted = $parameters['sorted_fields'];
62+
$fields = $this->fields();
63+
64+
foreach ($parameters['columns'] as $index => $c) {
65+
if (isset($sorted[$index]) && isset($fields[$sorted[$index]])) {
66+
$selected[] = (object) [
67+
'label' => $fields[$sorted[$index]]->label,
68+
'name' => $sorted[$index],
69+
];
70+
}
71+
else {
72+
$selected[] = (object) [
73+
'label' => __('texts.imports.ignore_slot'),
74+
'name' => 'none',
75+
];
76+
}
77+
}
78+
79+
return $selected;
80+
}
81+
5082
private function retrievePreSelectedFields(&$parameters)
5183
{
84+
if (isset($parameters['sorted_fields']) && !empty($parameters['sorted_fields'])) {
85+
return $this->retrievePreSortedFields($parameters);
86+
}
87+
5288
$selected = [];
5389

5490
/*
55-
Se la sotto-classe specifica un attributo "sorted_fields" tra i
56-
parametri, pre-popolo l'array dei campi selezionati in fase di
57-
revisione del CSV. Questo viene usato, ad esempio, dall'importer
58-
"Products" per inizializzare l'importazione dei prodotti di un certo
59-
fornitore usando sempre le stesse colonne (anziché doverle
60-
riassegnare a mano ogni volta)
91+
Qui cerco di auto-assegnare le colonne in funzione
92+
dell'intestazione nella prima riga del CSV. Se funziona, devo
93+
badare a non considerare la prima riga (perché, appunto,
94+
contiene una intestazione e non dei dati da importare)
6195
*/
62-
if (isset($parameters['sorted_fields']) && !empty($parameters['sorted_fields'])) {
63-
$sorted = $parameters['sorted_fields'];
64-
$fields = $this->fields();
96+
$mapped_cols = 0;
6597

66-
foreach ($parameters['columns'] as $index => $c) {
67-
if (isset($sorted[$index]) && isset($fields[$sorted[$index]])) {
68-
$selected[] = (object) [
69-
'label' => $fields[$sorted[$index]]->label,
70-
'name' => $sorted[$index],
71-
];
72-
}
73-
else {
74-
$selected[] = (object) [
75-
'label' => __('texts.imports.ignore_slot'),
76-
'name' => 'none',
77-
];
78-
}
79-
}
80-
}
81-
else {
82-
/*
83-
Qui cerco di auto-assegnare le colonne in funzione
84-
dell'intestazione nella prima riga del CSV. Se funziona, devo
85-
badare a non considerare la prima riga (perché, appunto,
86-
contiene una intestazione e non dei dati da importare)
87-
*/
88-
$mapped_cols = 0;
89-
90-
foreach ($parameters['columns'] as $c) {
91-
$found = false;
92-
93-
foreach ($parameters['sorting_fields'] as $sf => $sf_meta) {
94-
if ($sf_meta->label == $c) {
95-
$selected[] = (object) [
96-
'label' => $c,
97-
'name' => $sf,
98-
];
99-
100-
$mapped_cols++;
101-
$found = true;
102-
break;
103-
}
104-
}
98+
foreach ($parameters['columns'] as $c) {
99+
$found = false;
105100

106-
if ($found == false) {
101+
foreach ($parameters['sorting_fields'] as $sf => $sf_meta) {
102+
if ($sf_meta->label == $c) {
107103
$selected[] = (object) [
108-
'label' => __('texts.imports.ignore_slot'),
109-
'name' => 'none',
104+
'label' => $c,
105+
'name' => $sf,
110106
];
107+
108+
$mapped_cols++;
109+
$found = true;
110+
break;
111111
}
112112
}
113113

114-
if ($mapped_cols > count($parameters['columns']) / 2) {
115-
$parameters['skip_header'] = true;
114+
if (!$found) {
115+
$selected[] = (object) [
116+
'label' => __('texts.imports.ignore_slot'),
117+
'name' => 'none',
118+
];
116119
}
117120
}
118121

122+
if ($mapped_cols > count($parameters['columns']) / 2) {
123+
$parameters['skip_header'] = true;
124+
}
125+
119126
return $selected;
120127
}
121128

122-
protected function storeUploadedFile($request, $parameters)
129+
protected function storeUploadedFile(array $request, array $parameters)
123130
{
124131
try {
125-
$f = $request->file('file', null);
126-
if (is_null($f) || $f->isValid() === false) {
132+
$f = $request['file'];
133+
if (is_null($f) || !$f->isValid()) {
127134
throw new \InvalidArgumentException('File non caricato correttamente, possibili problemi con la dimensione');
128135
}
129136

@@ -188,10 +195,10 @@ private function mandatoryFields()
188195
return $ret;
189196
}
190197

191-
protected function initRead($request)
198+
protected function initRead(array $request)
192199
{
193-
$path = $request->input('path');
194-
$columns = $request->input('column');
200+
$path = $request['path'];
201+
$columns = $request['column'];
195202

196203
$testable = $this->mandatoryFields();
197204
$tested = $this->getColumnsIndex($columns, $testable);
@@ -264,13 +271,13 @@ public function finalTemplate()
264271

265272
abstract public function fields();
266273

267-
abstract public function testAccess($request);
274+
abstract public function testAccess(array $request);
268275

269-
abstract public function guess($request);
276+
abstract public function guess(array $request);
270277

271-
abstract public function select($request);
278+
abstract public function select(array $request);
272279

273280
abstract public function formatSelect($parameters);
274281

275-
abstract public function run($request);
282+
abstract public function run(array $request);
276283
}

0 commit comments

Comments
 (0)