diff --git a/Layout/default/Cpeprovisioning/Index.php b/Layout/default/Cpeprovisioning/Index.php index f7698ce46..e91e81ee3 100644 --- a/Layout/default/Cpeprovisioning/Index.php +++ b/Layout/default/Cpeprovisioning/Index.php @@ -196,7 +196,7 @@
- +
diff --git a/Layout/default/Cpeshipping/History.php b/Layout/default/Cpeshipping/History.php new file mode 100644 index 000000000..8e911de76 --- /dev/null +++ b/Layout/default/Cpeshipping/History.php @@ -0,0 +1,126 @@ + + + +
+
+
+
+ +
+

CPE Versand

+
+
+
+ + +
+
+ + + +
+
+

Versand-CSVs

+ + $pagination['count']): ?> + + + + + + + + + + + + + + + + + +
DateinameNameVersandt von
$s->file_id])?>">file->filename?>file->name?>creator->name?>
+ + $pagination['count']): ?> + + + +
+
+ +
+
+ + + diff --git a/Layout/default/Cpeshipping/Index.php b/Layout/default/Cpeshipping/Index.php index 3f6c85ce4..cbba0b173 100644 --- a/Layout/default/Cpeshipping/Index.php +++ b/Layout/default/Cpeshipping/Index.php @@ -58,30 +58,31 @@ -
"> + "> - - - + + + - + - - - + + +
Versand
Externes Produkt
bestellt
KundennummerKundeLieferort GerätLieferortKundeKundennummer
orderproduct->product->attributes) && $c->orderproduct->product->attributes['hostnetwork_order']->value): ?> - + + n/a order->owner->customer_number?>order->owner->getCompanyOrName()?>termination_id) ? $c->termination->building->zip." ".$c->termination->building->city : $c->order->owner->zip." ".$c->order->owner->city?> routertype?>termination_id) ? $c->termination->building->zip." ".$c->termination->building->city : $c->order->owner->zip." ".$c->order->owner->city?>order->owner->getCompanyOrName()?>order->owner->customer_number?>
@@ -134,5 +135,33 @@ $('.versand-checkbox input:checkbox').not(this).prop('checked', this.checked); }); }); + + $("#submit-form" ).submit(function( event ) { + $('[id^=ship-error-').each(function() { + $(this).hide(); + }); + + var error = false; + + $('input[name^=external_finish-]').each(function() { + var id_match = $(this).attr("name").match(/external_finish-(\d+)$/); + var id = id_match[1]; + + if(!$("input[name^=external_finish-").is(":checked")) { + if($("#ship-" + id).is(":checked")) { + error = true; + $("#ship-error-" + id).show(); + } + } + + }); + + if(error) { + console.log("not submitting"); + event.preventDefault(); + } + return; + }); + diff --git a/application/Cpeshipping/CpeshippingController.php b/application/Cpeshipping/CpeshippingController.php index 6977572aa..6bab7b870 100644 --- a/application/Cpeshipping/CpeshippingController.php +++ b/application/Cpeshipping/CpeshippingController.php @@ -38,6 +38,28 @@ class CpeshippingController extends mfBaseController { } + protected function historyAction() { + $this->layout()->setTemplate("Cpeshipping/History"); + + // pagination defaults + $pagination = []; + $pagination['start'] = 0; + $pagination['count'] = 25; + $pagination['maxItems'] = 0; + + if(is_numeric($this->request->s)) { + $pagination['start'] = intval($this->request->s); + } + + $ship_search = ["SqlOptions" => ["orderBy" => "id DESC"]]; + + $pagination['maxItems'] = CpeshippingFileModel::count($ship_search); + $shippings = CpeshippingFileModel::search($ship_search, $pagination); + + $this->layout()->set("shippings", $shippings); + $this->layout()->set("pagination", $pagination); + } + protected function shipAction() { //$this->redirect("Cpeshipping"); $r = $this->request; @@ -48,8 +70,12 @@ class CpeshippingController extends mfBaseController { $ships = $r->ships; } - $shippings = []; + if(!count($ships)) { + $this->layout()->setFlash("Keine CPEs ausgewählt", "warning"); + $this->redirect("Cpeshipping"); + } + $shippings = []; foreach($ships as $prov_id) { if(!is_numeric($prov_id) || $prov_id <= 0) { continue; @@ -65,6 +91,7 @@ class CpeshippingController extends mfBaseController { continue; } $shippings[] = $prov; + } $tpl = new Layout(); @@ -72,12 +99,52 @@ class CpeshippingController extends mfBaseController { $tpl->set("shippings", $shippings); $tpl->set("me", $this->me); $body = $tpl->render(); - - //$values = $tpl->getReturnedValue(); + /* header("Content-type: text/csv"); header("Content-disposition: attachment; filename=\"dhl-shipment-".date("Y-m-d-H-i-s").".csv\""); echo $body;exit; + */ + + $folder = MFUPLOAD_FILE_SAVE_PATH."/csv"; + $filename = "dhl-shipment-".date("Y-m-d-H-i-s").".csv"; + $path = "$folder/$filename"; + + if(!file_put_contents($path, $body)) { + $this->layout()->setFlash("Fehler beim Erstellen der CSV-Datei", "error"); + $this->redirect("Cpeshipping"); + } + + $file = new File(); + $file->name = "DHL Shipment CSV ".date("d.m.Y H:i:s"); + $file->filename = $filename; + $file->store_filename = $filename; + $file->subfolder = "csv"; + $file->create_by = $this->me->id; + $file->edit_by = $this->me->id; + $file_id = $file->save(); + if(!$file_id) { + $this->layout()->setFlash("Fehler beim Speichern der CSV-Datei (File)", "error"); + $this->redirect("Cpeshipping"); + } + + $shippingfile = CpeshippingFileModel::create(['file_id' => $file_id]); + $shippingfile_id = $shippingfile->save(); + + if(!$shippingfile_id) { + $this->layout()->setFlash("Fehler beim Speichern der CSV-Datei (ShippingFile)", "error"); + $this->redirect("Cpeshipping"); + } + + foreach($shippings as $prov) { + $prov->shipped = 1; + $prov->shipped_by = $this->me->id; + $prov->cpeshippingfile_id = $shippingfile_id; + $prov->save(); + } + + $this->layout()->setFlash("Versand-CSV erfolgreich erstellt.", "success"); + $this->redirect("Cpeshipping", "History", null, "download=".$file_id); } } \ No newline at end of file diff --git a/application/CpeshippingFile/CpeshippingFile.php b/application/CpeshippingFile/CpeshippingFile.php new file mode 100644 index 000000000..1661074b5 --- /dev/null +++ b/application/CpeshippingFile/CpeshippingFile.php @@ -0,0 +1,39 @@ +$name == null) { + + if(!$this->id) { + return null; + } + + if($name == "creator") { + $this->creator = new User($this->create_by); + return $this->creator; + } + + if($name == "editor") { + $this->editor = new User($this->edit_by); + return $this->editor; + } + + $classname = ucfirst($name); + $idfield = $name."_id"; + $this->$name = new $classname($this->$idfield); + + if($this->$name->id) { + return $this->$name; + } else { + return null; + } + } + + return $this->$name; + } + +} \ No newline at end of file diff --git a/application/CpeshippingFile/CpeshippingFileModel.php b/application/CpeshippingFile/CpeshippingFileModel.php new file mode 100644 index 000000000..088d4f100 --- /dev/null +++ b/application/CpeshippingFile/CpeshippingFileModel.php @@ -0,0 +1,141 @@ + "id"]; + + public static function create(Array $data) { + $model = new CpeshippingFile(); + + foreach($data as $field => $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = new User(); + $me->loadMe(); + + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + } + + return $model; + } + + public static function getOne($id) { + if(!is_numeric($id) || !$id) { + throw new Exception("Invalid number", 400); + } + $item = []; + $db = FronkDB::singleton(); + + $res = $db->select("CpeshippingFile", "*", "id=$id LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new CpeshippingFile($data); + } + return $item; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $res = $db->select("CpeshippingFile", "*", "$where ORDER BY id"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new CpeshippingFile($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(); + + $res = $db->select("CpeshippingFile", "*", "1=1 ORDER BY id"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new CpeshippingFile($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM CpeshippingFile WHERE $where"; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $sqlOptions = self::$SqlOptions; + + if(array_key_exists("SqlOptions", $filter) && is_array($filter['SqlOptions']) && count($filter['SqlOptions'])) { + if(array_key_exists("orderBy", $filter['SqlOptions'])) { + $SqlOptions["orderBy"] = $filter['SqlOptions']['orderBy']; + } + } + $sql = "SELECT * FROM CpeshippingFile WHERE $where ORDER BY ".$SqlOptions["orderBy"]; + + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($count)) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new CpeshippingFile($data); + } + } + return $items; + } + + private function getSqlFilter($filter) { + $where = "1=1 "; + + if(array_key_exists("file_id", $filter)) { + $file_id = $filter['file_id']; + if(is_numeric($file_id)) { + $where .= " AND file_id=$file_id"; + } + } + + return $where; + } + +} diff --git a/application/File/File.php b/application/File/File.php index 0404a32e7..1eac539d0 100644 --- a/application/File/File.php +++ b/application/File/File.php @@ -4,8 +4,10 @@ class File extends mfBaseModel { private $creator; private $editor; - public function createFile($overwrite = false) { - // TODO + public static function createFile($filename = false, $overwrite = false) { + // make filename + + } public function delete() { diff --git a/application/File/FileController.php b/application/File/FileController.php index f8e75739d..819eede11 100644 --- a/application/File/FileController.php +++ b/application/File/FileController.php @@ -26,9 +26,10 @@ class FileController extends mfBaseController { throw new Exception("File not found", 404); } $filename = $file->store_filename; - $path = MFUPLOAD_FILE_SAVE_PATH."/documents/$filename"; + $path = MFUPLOAD_FILE_SAVE_PATH; + $path .= ($file->subfolder) ? "/".$file->subfolder : ""; + $path .= "/$filename"; - //var_dump($path);exit; if(!file_exists($path)) { throw new Exception("File not found", 4041); } diff --git a/application/Linework/LineworkController.php b/application/Linework/LineworkController.php index 9a3c51917..0d523522f 100644 --- a/application/Linework/LineworkController.php +++ b/application/Linework/LineworkController.php @@ -280,6 +280,7 @@ class LineworkController extends mfBaseController { $file_data = []; $file_data['name'] = ($r->file_name) ? $r->file_name : $upload->getOriginalFilename(); $file_data['filename'] = ($r->file_filename) ? $r->file_filename : $upload->getOriginalFilename(); + $file_data['subfolder'] = "documents"; $file_data['store_filename'] = $upload->getFilename(); $file_data['orig_filename'] = $upload->getOriginalFilename(); diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index 2f7a538d8..6c0fd32d6 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -618,6 +618,7 @@ class OrderController extends mfBaseController { $file_data = []; $file_data['name'] = ($r->file_name) ? $r->file_name : $upload->getOriginalFilename(); $file_data['filename'] = ($r->file_filename) ? $r->file_filename : $upload->getOriginalFilename(); + $file_data['subfolder'] = "documents"; $file_data['store_filename'] = $upload->getFilename(); $file_data['orig_filename'] = $upload->getOriginalFilename(); diff --git a/application/Pipework/PipeworkController.php b/application/Pipework/PipeworkController.php index 6aa00980c..1aab946d7 100644 --- a/application/Pipework/PipeworkController.php +++ b/application/Pipework/PipeworkController.php @@ -269,6 +269,7 @@ class PipeworkController extends mfBaseController { $file_data = []; $file_data['name'] = ($r->file_name) ? $r->file_name : $upload->getOriginalFilename(); $file_data['filename'] = ($r->file_filename) ? $r->file_filename : $upload->getOriginalFilename(); + $file_data['subfolder'] = "documents"; $file_data['store_filename'] = $upload->getFilename(); $file_data['orig_filename'] = $upload->getOriginalFilename();