Passed
Push — master ( 88d705...44ae42 )
by Andrea
12:16
created

FiCoreController   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 142
Duplicated Lines 0 %

Test Coverage

Coverage 38.78%

Importance

Changes 0
Metric Value
dl 0
loc 142
ccs 38
cts 98
cp 0.3878
rs 10
c 0
b 0
f 0
wmc 19

5 Methods

Rating   Name   Duplication   Size   Complexity  
A stampatabellaAction() 0 10 1
C importaexcelAction() 0 64 11
A getValoreCampoExcel() 0 12 4
A esportaexcelAction() 0 16 1
B prepareOutput() 0 29 2
1
<?php
2
3
namespace Fi\CoreBundle\Controller;
4
5
use Symfony\Component\HttpFoundation\Request;
6
use Symfony\Component\HttpFoundation\Response;
7
8
class FiCoreController extends FiController
9
{
10
11 1
    public function stampatabellaAction(Request $request)
12
    {
13 1
        $this->setup($request);
14 1
        $pdf = new StampatabellaController($this->container);
15
16 1
        $parametri = $this->prepareOutput($request);
17
18 1
        $pdf->stampa($parametri);
19
20 1
        return new Response('OK');
21
    }
22
23 2
    public function esportaexcelAction(Request $request)
24
    {
25 1
        $this->setup($request);
26 1
        $xls = new StampatabellaController($this->container);
27
28 2
        $parametri = $this->prepareOutput($request);
29
30 1
        $fileexcel = $xls->esportaexcel($parametri);
31 1
        $response = new Response();
32
33 1
        $response->headers->set('Content-Type', 'text/csv');
34 1
        $response->headers->set('Content-Disposition', 'attachment;filename="' . basename($fileexcel) . '"');
35
36 1
        $response->setContent(file_get_contents($fileexcel));
37
38 1
        return $response;
39
    }
40
41 2
    public function prepareOutput($request)
42
    {
43 2
        $namespace = $this->getNamespace();
44 2
        $bundle = $this->getBundle();
45 2
        $container = $this->container;
46
47 2
        $nomebundle = $namespace . $bundle . 'Bundle';
48
49 2
        $em = $this->getDoctrine()->getManager();
50
51
        $paricevuti = array(
52 2
            'nomebundle' => $nomebundle,
53 2
            'nometabella' => $request->get('nometabella'),
54 2
            'container' => $container,
55 2
            'request' => $request,
56 2
        );
57
58 2
        $parametripertestatagriglia = $this->getParametersTestataPerGriglia($request, $container, $em, $paricevuti);
59
60 2
        $testatagriglia = Griglia::testataPerGriglia($parametripertestatagriglia);
61
62 2
        if ($request->get('titolo')) {
63
            $testatagriglia['titolo'] = $request->get('titolo');
64
        }
65 2
        $parametridatipergriglia = $this->getParametersDatiPerGriglia($request, $container, $em, $paricevuti);
66 2
        $corpogriglia = Griglia::datiPerGriglia($parametridatipergriglia);
67
68 2
        $parametri = array('request' => $request, 'testata' => $testatagriglia, 'griglia' => $corpogriglia);
69 2
        return $parametri;
70
    }
71
72 1
    public function importaexcelAction(Request $request)
73
    {
74
        $this->setup($request);
75
        $return = "OK";
76
        try {
77
            $em = $this->getDoctrine()->getManager();
78
            $file = $request->files->get('file');
79
            $tablenamefile = preg_replace('/\\.[^.\\s]{3,4}$/', '', $file->getClientOriginalName());
80
            $parametri = json_decode($request->get("parametrigriglia"));
81
            $bundle = $parametri->nomebundle;
82
            $controller = $parametri->nometabella;
83
            $repo = $em->getRepository($bundle . ":" . $tablenamefile);
84
            $className = $repo->getClassName();
85
86
            $classentitypath = "\\" . $className;
87
            if (strtolower($controller) != strtolower($tablenamefile)) {
88
                $response = new Response("Si sta cercando di caricare i dati di " . $tablenamefile . " in " . $controller);
89
                return $response;
90
            }
91
92
            if (is_a($repo, "Doctrine\ORM\EntityRepository")) {
93
                $entitycolumns = $em->getClassMetadata($bundle . ":" . $tablenamefile);
94
                $objPHPExcel = \PHPExcel_IOFactory::load($file);
95
                foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
96
                    $highestRow = $worksheet->getHighestRow();
97
                    $highestColumn = $worksheet->getHighestColumn();
98
                    $highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
99
                    $colonne = array();
100
                    for ($index = 0; $index < $highestColumnIndex; $index++) {
101
                        $columnname = strtolower($worksheet->getCellByColumnAndRow($index, 1)->getValue());
102
                        if (!$entitycolumns->hasField($columnname) || $columnname == "id") {
103
                            //the entity does not have a such property $columnname or id column
104
                            continue;
105
                        } else {
106
                            $colonne[] = array("colxls" => $index, "name" => $columnname, "type" => $entitycolumns->getTypeOfField($columnname));
107
                        }
108
                    }
109
110
                    for ($rows = 2; $rows < $highestRow + 1; $rows++) {
111
                        $newentity = new $classentitypath();
112
                        foreach ($colonne as $colonna) {
113
                            $cols = $colonna["colxls"];
114
                            $valore = $worksheet->getCellByColumnAndRow($cols, $rows)->getValue();
115
                            if ($valore) {
116
                                $fieldset = "set" . ucfirst($colonna["name"]);
117
                                $valore = $this->getValoreCampoExcel($valore, $colonna);
118
                                $newentity->$fieldset($valore);
119
                            }
120
                        }
121
                        $em->persist($newentity);
122
                    }
123
                    $em->flush();
124
                }
125
            } else {
126
                $response = new Response($return);
127
                return $response;
128
            }
129 1
        } catch (\Exception $exc) {
130
            $response = new Response($exc->getMessage());
131 1
            return $response;
132
        }
133
134 1
        $response = new Response($return);
135
        return $response;
136
    }
137
138
    private function getValoreCampoExcel($valoreexcel, $colonna)
139
    {
140
        $valore = $valoreexcel;
141
        if ($colonna["type"] === "date") {
142
            $exceldata = \PHPExcel_Style_NumberFormat::toFormattedString($valoreexcel, 'YYYY-MM-DD');
143
            $nuovadata = \DateTime::createFromFormat('Y-m-d', $exceldata);
144
            $valore = $nuovadata;
145
        } elseif ($colonna["type"] === "boolean") {
146
            $valore = (($valoreexcel == 'SI') ? true : false);
147
        }
148
149
        return $valore;
150
    }
151
}
152