From 0c74af0e9dd51f25013ce6cfdca86f5080d9b790 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 14 Nov 2024 14:34:28 +0100 Subject: [PATCH] Reformatted PreorderController.php --- application/Preorder/PreorderController.php | 2530 +++++++++---------- 1 file changed, 1265 insertions(+), 1265 deletions(-) diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index 549d970a7..4f0651449 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -1,1310 +1,1310 @@ needlogin=true; - $me = new User(); - $me->loadMe(); - $this->me = $me; - $this->layout()->set("me",$me); - - if(!$me->is(["Admin", "netowner", "salespartner", "preorderfront"])) { - $this->redirect("Dashboard"); - } - } - - protected function indexAction() { - $this->layout()->setTemplate("Preorder/Index"); - - if($this->request->resetFilter) { - unset($_SESSION[MFAPPNAME.'-Preorder-filter']); - foreach($_SESSION as $key => $s) { - if(preg_match('/^'.MFAPPNAME.'-Preorder-filter-campaign-\d+$/', $key)) { - unset($_SESSION[$key]); + + protected function init() { + $this->needlogin = true; + $me = new User(); + $me->loadMe(); + $this->me = $me; + $this->layout()->set("me", $me); + + if(!$me->is(["Admin", "netowner", "salespartner", "preorderfront"])) { + $this->redirect("Dashboard"); } - } } - - $filter = []; - - if(is_array($this->request->filter)) { - $filter = $this->request->filter; - - if(isset($this->request->filter["preordercampaign_id"]) && $this->request->filter["preordercampaign_id"]) { - $filter_po_id = $filter["preordercampaign_id"]; - if(count($this->request->filter) == 1 && isset($_SESSION[MFAPPNAME.'-Preorder-filter-campaign-'.$filter_po_id])) { - $filter = $_SESSION[MFAPPNAME.'-Preorder-filter-campaign-'.$filter_po_id]; - } else { - $_SESSION[MFAPPNAME.'-Preorder-filter-campaign-'.$filter["preordercampaign_id"]] = $filter; - } - } else { - $_SESSION[MFAPPNAME.'-Preorder-filter'] = $filter; - } - } else { - if(array_key_exists(MFAPPNAME.'-Preorder-filter', $_SESSION) && count($_SESSION[MFAPPNAME.'-Preorder-filter'])) { - $filter = $_SESSION[MFAPPNAME.'-Preorder-filter']; - if(isset($filter['preordercampaign_id'])) { - $filter_po_id = $filter['preordercampaign_id']; - if(isset($_SESSION[MFAPPNAME.'-Preorder-filter-campaign-'.$filter_po_id])) { - //var_dump("blah"); - $filter = $_SESSION[MFAPPNAME.'-Preorder-filter-campaign-'.$filter_po_id]; - } - } - } - } - - //var_dump($_SESSION, $filter);exit; - - $this->layout->set("filter", $filter); - $filter = $this->getPreparedFilter($filter); - - // pagination defaults - $pagination = []; - $pagination['start'] = 0; - $pagination['count'] = 25; - $pagination['maxItems'] = 0; - - if(is_numeric($this->request->s)) { - $pagination['start'] = intval($this->request->s); - } - - $my_networks = []; - $my_campaigns = []; - $my_campaign_ids = []; - - $this->layout()->set("campaign", new Preordercampaign()); - - if($this->me->is("Admin")) { - if($filter['preordercampaign_id']) { - $this->layout()->set("campaign", new Preordercampaign($filter['preordercampaign_id'])); - } else { - $my_campaigns = PreordercampaignModel::getAll(); - } - $this->layout()->set("my_campaigns", PreordercampaignModel::getAll()); - } else { - if($this->me->is("preorderfront")) { - $pns = json_decode($this->me->getFlag("preorder_networks")); - if(is_array($pns) && count($pns)) { - foreach($pns as $pn_id) { - $my_networks[] = new Network($pn_id); - } - } else { - $my_networks = $this->me->myNetworks(['netowner','salespartner']); - } - - //var_dump($my_networks);exit; - } else { - $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); - } - - // check users allowed networks - $user_network_ids = $this->me->getFlag("preorder_networks")->value(); - if($user_network_ids) { - $user_network_ids = json_decode($user_network_ids); - } - - if(is_array($user_network_ids) && count($user_network_ids)) { - if(!$my_networks) { - foreach($user_network_ids as $mnid) { - $my_networks[] = new Network($mnid); - } - } else { - //var_dump($user_network_ids, $my_networks);exit; - $new_my_networks = []; - foreach($my_networks as $network) { - if(in_array($network->id, $user_network_ids)) { - $new_my_networks[$network->id] = $network; + + protected function indexAction() { + $this->layout()->setTemplate("Preorder/Index"); + + if($this->request->resetFilter) { + unset($_SESSION[MFAPPNAME . '-Preorder-filter']); + foreach($_SESSION as $key => $s) { + if(preg_match('/^' . MFAPPNAME . '-Preorder-filter-campaign-\d+$/', $key)) { + unset($_SESSION[$key]); + } } - } - $my_networks = $new_my_networks; - } - } - - foreach($my_networks as $network) { - foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { - $my_campaigns[] = $campaign; - if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; - } - } - //var_dump($my_network_ids,$my_campaign_ids);exit; - $this->layout()->set("my_campaigns", $my_campaigns); - - if($filter['preordercampaign_id'] && in_array($filter['preordercampaign_id'], $my_campaign_ids)) { - $campaign_id = $filter['preordercampaign_id']; - if(is_numeric($campaign_id) && $campaign_id > 0) { - $campaign = new Preordercampaign($campaign_id); - $this->layout()->set("campaign", $campaign); - - if($campaign->network->owner_id != $this->me->address_id && NetworkAddressModel::getFirst(["network_id" => $campaign->network_id, "address_id" => $this->me->address_id, "addresstype" => "salespartner"])) { - $filter["operator_id"] = $this->me->address_id; - } - - } - } else { - $filter['preordercampaign_id'] = $my_campaign_ids; - if(NetworkAddressModel::getFirst(["address_id" => $this->me->address_id, "addresstype" => "salespartner"])) { - $filter["operator_id"] = $this->me->address_id; } - } - - if(!$filter['preordercampaign_id']) $filter['preordercampaign_id'] = 0; + $filter = []; + + if(is_array($this->request->filter)) { + $filter = $this->request->filter; + + if(isset($this->request->filter["preordercampaign_id"]) && $this->request->filter["preordercampaign_id"]) { + $filter_po_id = $filter["preordercampaign_id"]; + if(count($this->request->filter) == 1 && isset($_SESSION[MFAPPNAME . '-Preorder-filter-campaign-' . $filter_po_id])) { + $filter = $_SESSION[MFAPPNAME . '-Preorder-filter-campaign-' . $filter_po_id]; + } else { + $_SESSION[MFAPPNAME . '-Preorder-filter-campaign-' . $filter["preordercampaign_id"]] = $filter; + } + } else { + $_SESSION[MFAPPNAME . '-Preorder-filter'] = $filter; + } + } else { + if(array_key_exists(MFAPPNAME . '-Preorder-filter', $_SESSION) && count($_SESSION[MFAPPNAME . '-Preorder-filter'])) { + $filter = $_SESSION[MFAPPNAME . '-Preorder-filter']; + if(isset($filter['preordercampaign_id'])) { + $filter_po_id = $filter['preordercampaign_id']; + if(isset($_SESSION[MFAPPNAME . '-Preorder-filter-campaign-' . $filter_po_id])) { + //var_dump("blah"); + $filter = $_SESSION[MFAPPNAME . '-Preorder-filter-campaign-' . $filter_po_id]; + } + } + } + } + + //var_dump($_SESSION, $filter);exit; + + $this->layout->set("filter", $filter); + $filter = $this->getPreparedFilter($filter); + + // pagination defaults + $pagination = []; + $pagination['start'] = 0; + $pagination['count'] = 25; + $pagination['maxItems'] = 0; + + if(is_numeric($this->request->s)) { + $pagination['start'] = intval($this->request->s); + } + + $my_networks = []; + $my_campaigns = []; + $my_campaign_ids = []; + + $this->layout()->set("campaign", new Preordercampaign()); + + if($this->me->is("Admin")) { + if($filter['preordercampaign_id']) { + $this->layout()->set("campaign", new Preordercampaign($filter['preordercampaign_id'])); + } else { + $my_campaigns = PreordercampaignModel::getAll(); + } + $this->layout()->set("my_campaigns", PreordercampaignModel::getAll()); + } else { + if($this->me->is("preorderfront")) { + $pns = json_decode($this->me->getFlag("preorder_networks")); + if(is_array($pns) && count($pns)) { + foreach($pns as $pn_id) { + $my_networks[] = new Network($pn_id); + } + } else { + $my_networks = $this->me->myNetworks(['netowner', 'salespartner']); + } + + //var_dump($my_networks);exit; + } else { + $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); + } + + // check users allowed networks + $user_network_ids = $this->me->getFlag("preorder_networks")->value(); + if($user_network_ids) { + $user_network_ids = json_decode($user_network_ids); + } + + if(is_array($user_network_ids) && count($user_network_ids)) { + if(!$my_networks) { + foreach($user_network_ids as $mnid) { + $my_networks[] = new Network($mnid); + } + } else { + //var_dump($user_network_ids, $my_networks);exit; + $new_my_networks = []; + foreach($my_networks as $network) { + if(in_array($network->id, $user_network_ids)) { + $new_my_networks[$network->id] = $network; + } + } + $my_networks = $new_my_networks; + } + } + + foreach($my_networks as $network) { + foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { + $my_campaigns[] = $campaign; + if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; + } + } + //var_dump($my_network_ids,$my_campaign_ids);exit; + $this->layout()->set("my_campaigns", $my_campaigns); + + if($filter['preordercampaign_id'] && in_array($filter['preordercampaign_id'], $my_campaign_ids)) { + $campaign_id = $filter['preordercampaign_id']; + if(is_numeric($campaign_id) && $campaign_id > 0) { + $campaign = new Preordercampaign($campaign_id); + $this->layout()->set("campaign", $campaign); + + if($campaign->network->owner_id != $this->me->address_id && NetworkAddressModel::getFirst(["network_id" => $campaign->network_id, "address_id" => $this->me->address_id, "addresstype" => "salespartner"])) { + $filter["operator_id"] = $this->me->address_id; + } + + } + } else { + $filter['preordercampaign_id'] = $my_campaign_ids; + if(NetworkAddressModel::getFirst(["address_id" => $this->me->address_id, "addresstype" => "salespartner"])) { + $filter["operator_id"] = $this->me->address_id; + } + + } + + if(!$filter['preordercampaign_id']) $filter['preordercampaign_id'] = 0; + } + + + //var_dump($filter["preordercampaign_id"], $filter);exit; + + if($filter['addon_services']) { + $pagination['maxItems'] = PreorderModel::countOrderedAddonservices($filter); + $preorders = PreorderModel::searchOrderedAddonservices($filter, $pagination); + } else { + $pagination['maxItems'] = PreorderModel::countActive($filter); + $preorders = PreorderModel::searchActive($filter, $pagination); + } + $this->layout()->set("pagination", $pagination); + $this->layout()->set("preorders", $preorders); + } - - - //var_dump($filter["preordercampaign_id"], $filter);exit; - - if($filter['addon_services']) { - $pagination['maxItems'] = PreorderModel::countOrderedAddonservices($filter); - $preorders = PreorderModel::searchOrderedAddonservices($filter, $pagination); - } else { - $pagination['maxItems'] = PreorderModel::countActive($filter); - $preorders = PreorderModel::searchActive($filter, $pagination); - } - $this->layout()->set("pagination", $pagination); - $this->layout()->set("preorders", $preorders); - - } - - private function getPreparedFilter($filter) { - $new_filter = []; - /*if(array_key_exists("show_deleted", $filter)) { - if($filter['show_deleted'] == "show") { - $new_filter['deleted'] = null; - } elseif($filter['show_deleted'] == "only") { - $new_filter['deleted'] = 1; - } else { - $new_filter['deleted'] = null; - } - } else { - $new_filter['deleted'] = null; - }*/ - - $new_filter['add-where'] = ""; - - if(array_key_exists("magic_search",$filter) && trim($filter['magic_search'])) { - $search = trim($filter['magic_search']); - $new_filter['add-where'] .= " AND ("; - $new_filter['add-where'] .= " adb_hausnummer.gemeinde like '%$search%' OR adb_hausnummer.plz like '%$search%' OR adb_hausnummer.strasse like '%$search%' + private function getPreparedFilter($filter) { + $new_filter = []; + + /*if(array_key_exists("show_deleted", $filter)) { + if($filter['show_deleted'] == "show") { + $new_filter['deleted'] = null; + } elseif($filter['show_deleted'] == "only") { + $new_filter['deleted'] = 1; + } else { + $new_filter['deleted'] = null; + } + } else { + $new_filter['deleted'] = null; + }*/ + + $new_filter['add-where'] = ""; + + if(array_key_exists("magic_search", $filter) && trim($filter['magic_search'])) { + $search = trim($filter['magic_search']); + $new_filter['add-where'] .= " AND ("; + $new_filter['add-where'] .= " adb_hausnummer.gemeinde like '%$search%' OR adb_hausnummer.plz like '%$search%' OR adb_hausnummer.strasse like '%$search%' OR adb_hausnummer.hausnummer like '%$search%' OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%$search%' - OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%".str_replace(" ", "%", $search)."%'"; - $new_filter['add-where'] .= " OR company like '%$search%' OR firstname like '%$search%' OR lastname like '%$search%' OR concat(firstname, ' ', lastname) like '%$search%' OR concat(lastname, ' ', firstname) like '%$search%' OR street like '%$search%' OR zip like '%$search%' OR city like '%$search%' OR email like '%$search%' OR phone like '%$search%'"; - $new_filter['add-where'] .= " OR tt_preorder.ucode like '%$search%' OR tt_preorder.oaid like '%$search%'"; - - $new_filter['add-where'] .= " OR adb_wohneinheit.extref like '%$search%'"; - $new_filter['add-where'] .= " OR adb_hausnummer.hausnummer_extref like '%$search%'"; - $new_filter['add-where'] .= " OR adb_hausnummer.adrcd like '%$search%'"; - $new_filter['add-where'] .= " OR adb_hausnummer.grund_nr like '%$search%'"; - - $new_filter['add-where'] .= " OR adb_hausnummer.rimo_fcp_name like '%$search%'"; - $new_filter['add-where'] .= " OR workorder.rimo_status like '%$search%'"; - $new_filter['add-where'] .= " OR workorder.rimo_name like '%$search%'"; - - //$new_filter['add-where'] .= " OR "; - $new_filter['add-where'] .= " )"; - } - - //echo $new_filter['add-where'];exit; - - if(array_key_exists("address", $filter) && $filter["address"]) { - $address = $this->db()->escape($filter['address']); - $new_filter['add-where'] .= " AND (adb_hausnummer.gemeinde like '%$address%' OR adb_hausnummer.plz like '%$address%' OR adb_hausnummer.strasse like '%$address%' - OR adb_hausnummer.hausnummer like '%$address%' OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%$address%' - OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%".str_replace(" ", "%", $address)."%')"; - } - - if(array_key_exists("hausnummer", $filter) && $filter["hausnummer"]) { - $hausnummer = $this->db()->escape($filter['hausnummer']); - $new_filter['hausnummer'] = $hausnummer; - } - - if(array_key_exists("kunde", $filter) && $filter["kunde"]) { - $kunde = $this->db()->escape($filter['kunde']); - $new_filter['add-where'] .= " AND (company like '%$kunde%' OR firstname like '%$kunde%' OR lastname like '%$kunde%' OR concat(firstname, ' ', lastname) like '%$kunde%' OR concat(lastname, ' ', firstname) like '%$kunde%' OR street like '%$kunde%' OR zip like '%$kunde%' OR city like '%$kunde%' OR phone like '%$kunde%' OR email like '%$kunde%')"; - } - - - $new_filter['addon_services'] = false; - if(array_key_exists("addon_services", $filter) && $filter['addon_services'] == 1) { - $new_filter['addon_services'] = true; - } - - if(array_key_exists("address_source", $filter)) { - if($filter['address_source'] == "manual") { - $new_filter['address_created'] = true; - } - if($filter['address_source'] == "addressdb") { - $new_filter['address_created'] = null; - } - } - - if(array_key_exists("unit_missing", $filter)) { - if($filter['unit_missing'] == "yes") { - $new_filter['adb_wohneinheit_id'] = null; - } elseif($filter['unit_missing'] == "no") { - $new_filter['adb_wohneinheit_id'] = true; - } - unset($filter['unit_missing']); - } - - if(array_key_exists("rimo_home_extref", $filter)) { - if($filter['rimo_home_extref'] == "1") { - $new_filter['add-where'] .= " AND (adb_wohneinheit.id IS NOT NULL AND adb_wohneinheit.extref IS NOT NULL AND adb_wohneinheit.extref like 'SDIHome_%')"; - } elseif($filter['rimo_home_extref'] == "0") { - $new_filter['add-where'] .= " AND (adb_wohneinheit.extref IS NULL OR adb_wohneinheit.extref NOT LIKE 'SDIHome_%')"; - } - } - - if(array_key_exists("rimo_workorder", $filter)) { - if($filter["rimo_workorder"] == "1") { - $new_filter['rimo_workorder'] = true; - } elseif($filter["rimo_workorder"] == "0") { - $new_filter['rimo_workorder'] = false; - } - unset($filter['rimo_workorder']); - } - - if(array_key_exists("rimo_workorder_status", $filter) && $filter['rimo_workorder_status']) { - $new_filter["rimo_workorder_status"] = $filter['rimo_workorder_status']; - } - - if(array_key_exists("rimo_workorder_name", $filter) && $filter['rimo_workorder_name']) { - $new_filter["rimo_workorder_name"] = $filter['rimo_workorder_name']; - } - - if(array_key_exists("ucode", $filter) && $filter['ucode']) { - $new_filter['ucode'] = "%".$filter['ucode']."%"; - unset($filter['ucode']); - } - - if(array_key_exists("oaid", $filter) && $filter['oaid']) { - $new_filter['oaid'] = "%".$filter['oaid']."%"; - unset($filter['oaid']); - } - - if(array_key_exists("status", $filter) && is_array($filter['status']) && count($filter['status'])) { - $new_filter['status_id'] = []; - foreach($filter["status"] as $s) { - if(is_numeric($s) && $s > 0) { - $new_filter['status_id'][] = $s; + OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%" . str_replace(" ", "%", $search) . "%'"; + $new_filter['add-where'] .= " OR company like '%$search%' OR firstname like '%$search%' OR lastname like '%$search%' OR concat(firstname, ' ', lastname) like '%$search%' OR concat(lastname, ' ', firstname) like '%$search%' OR street like '%$search%' OR zip like '%$search%' OR city like '%$search%' OR email like '%$search%' OR phone like '%$search%'"; + $new_filter['add-where'] .= " OR tt_preorder.ucode like '%$search%' OR tt_preorder.oaid like '%$search%'"; + + $new_filter['add-where'] .= " OR adb_wohneinheit.extref like '%$search%'"; + $new_filter['add-where'] .= " OR adb_hausnummer.hausnummer_extref like '%$search%'"; + $new_filter['add-where'] .= " OR adb_hausnummer.adrcd like '%$search%'"; + $new_filter['add-where'] .= " OR adb_hausnummer.grund_nr like '%$search%'"; + + $new_filter['add-where'] .= " OR adb_hausnummer.rimo_fcp_name like '%$search%'"; + $new_filter['add-where'] .= " OR workorder.rimo_status like '%$search%'"; + $new_filter['add-where'] .= " OR workorder.rimo_name like '%$search%'"; + + //$new_filter['add-where'] .= " OR "; + $new_filter['add-where'] .= " )"; } - } - } - - /*if(array_key_exists("attributes", $filter) && count($filter['attributes'])) { - - }*/ - - if(is_array($filter) && count($filter)) { - foreach($filter as $name => $value) { - $new_filter[$name] = $value; - } + + //echo $new_filter['add-where'];exit; + + if(array_key_exists("address", $filter) && $filter["address"]) { + $address = $this->db()->escape($filter['address']); + $new_filter['add-where'] .= " AND (adb_hausnummer.gemeinde like '%$address%' OR adb_hausnummer.plz like '%$address%' OR adb_hausnummer.strasse like '%$address%' + OR adb_hausnummer.hausnummer like '%$address%' OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%$address%' + OR CONCAT (adb_hausnummer.strasse, ' ', adb_hausnummer.hausnummer) like '%" . str_replace(" ", "%", $address) . "%')"; + } + + if(array_key_exists("hausnummer", $filter) && $filter["hausnummer"]) { + $hausnummer = $this->db()->escape($filter['hausnummer']); + $new_filter['hausnummer'] = $hausnummer; + } + + if(array_key_exists("kunde", $filter) && $filter["kunde"]) { + $kunde = $this->db()->escape($filter['kunde']); + $new_filter['add-where'] .= " AND (company like '%$kunde%' OR firstname like '%$kunde%' OR lastname like '%$kunde%' OR concat(firstname, ' ', lastname) like '%$kunde%' OR concat(lastname, ' ', firstname) like '%$kunde%' OR street like '%$kunde%' OR zip like '%$kunde%' OR city like '%$kunde%' OR phone like '%$kunde%' OR email like '%$kunde%')"; + } + + + $new_filter['addon_services'] = false; + if(array_key_exists("addon_services", $filter) && $filter['addon_services'] == 1) { + $new_filter['addon_services'] = true; + } + + if(array_key_exists("address_source", $filter)) { + if($filter['address_source'] == "manual") { + $new_filter['address_created'] = true; + } + if($filter['address_source'] == "addressdb") { + $new_filter['address_created'] = null; + } + } + + if(array_key_exists("unit_missing", $filter)) { + if($filter['unit_missing'] == "yes") { + $new_filter['adb_wohneinheit_id'] = null; + } elseif($filter['unit_missing'] == "no") { + $new_filter['adb_wohneinheit_id'] = true; + } + unset($filter['unit_missing']); + } + + if(array_key_exists("rimo_home_extref", $filter)) { + if($filter['rimo_home_extref'] == "1") { + $new_filter['add-where'] .= " AND (adb_wohneinheit.id IS NOT NULL AND adb_wohneinheit.extref IS NOT NULL AND adb_wohneinheit.extref like 'SDIHome_%')"; + } elseif($filter['rimo_home_extref'] == "0") { + $new_filter['add-where'] .= " AND (adb_wohneinheit.extref IS NULL OR adb_wohneinheit.extref NOT LIKE 'SDIHome_%')"; + } + } + + if(array_key_exists("rimo_workorder", $filter)) { + if($filter["rimo_workorder"] == "1") { + $new_filter['rimo_workorder'] = true; + } elseif($filter["rimo_workorder"] == "0") { + $new_filter['rimo_workorder'] = false; + } + unset($filter['rimo_workorder']); + } + + if(array_key_exists("rimo_workorder_status", $filter) && $filter['rimo_workorder_status']) { + $new_filter["rimo_workorder_status"] = $filter['rimo_workorder_status']; + } + + if(array_key_exists("rimo_workorder_name", $filter) && $filter['rimo_workorder_name']) { + $new_filter["rimo_workorder_name"] = $filter['rimo_workorder_name']; + } + + if(array_key_exists("ucode", $filter) && $filter['ucode']) { + $new_filter['ucode'] = "%" . $filter['ucode'] . "%"; + unset($filter['ucode']); + } + + if(array_key_exists("oaid", $filter) && $filter['oaid']) { + $new_filter['oaid'] = "%" . $filter['oaid'] . "%"; + unset($filter['oaid']); + } + + if(array_key_exists("status", $filter) && is_array($filter['status']) && count($filter['status'])) { + $new_filter['status_id'] = []; + foreach($filter["status"] as $s) { + if(is_numeric($s) && $s > 0) { + $new_filter['status_id'][] = $s; + } + } + } + + /*if(array_key_exists("attributes", $filter) && count($filter['attributes'])) { + + }*/ + + if(is_array($filter) && count($filter)) { + foreach($filter as $name => $value) { + $new_filter[$name] = $value; + } + } + + return $new_filter; } - return $new_filter; - } - - protected function addAction() { - $this->layout()->setTemplate("Preorder/Form"); - - if($this->me->isAdmin()) { - $this->layout()->set("networks", NetworkModel::getAll()); - } else { - $this->layout()->set("networks", $this->me->my_networks); - } - - if(!$this->request->preordercampaign_id) { - $this->layout()->setFlash("Keine Kampagne ausgewählt!", "warn"); - } - - $campaign_id = $this->request->preordercampaign_id; - $campaign = new Preordercampaign($campaign_id); - $this->layout()->set("campaign", $campaign); - - $products = []; - foreach(ProductNetworkModel::search(["network_id" => $campaign->network_id]) as $pn) { - if(!$pn->product->active) continue; - if(!array_key_exists($pn->product_id, $products)) { - if(is_array($pn->product->attributes) && !array_key_exists("presales", $pn->product->attributes)) { - $products[$pn->product_id] = $pn->product; + protected function addAction() { + $this->layout()->setTemplate("Preorder/Form"); + + if($this->me->isAdmin()) { + $this->layout()->set("networks", NetworkModel::getAll()); + } else { + $this->layout()->set("networks", $this->me->my_networks); } - } - } - //var_dump($products);exit; - $this->layout()->set("products", $products); - - $partners = AddressModel::search(['addresstype' => ['netowner','salespartner']]); - $this->layout()->set("partners", $partners); - } - - protected function editAction() { - $id = $this->request->id; - if(!is_numeric($id) || $id < 1) { - $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); - $this->redirect("Preordercampaign"); - } - - $preorder = new Preorder($id); - if(!$preorder->id) { - $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); - $this->redirect("Preordercampaign"); - } - - $this->request->set("preordercampaign_id", $preorder->preordercampaign_id); // needed in addAction() - $this->layout()->set("preorder", $preorder); - - //var_dump($preorder->building->street);exit; - - return $this->addAction(); - - } - - protected function saveAction() { - $r = $this->request; - //var_dump($r);exit; - - /* - * add or edit - */ - $id = $r->id; - if(is_numeric($id) && $id > 0) { - $mode = "edit"; - $preorder = new Preorder($id); - if(!$preorder->id) { - $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); - $this->redirect("Preordercampaign"); - } - } else { - $id = false; - $mode = "add"; - } - - /* - * data colletion - */ - $data = []; - $data['preordercampaign_id'] = $r->campaign_id; - $data['building_id'] = ($r->building_id) ? $r->building_id : null; - $data['adb_hausnummer_id'] = $r->adb_hausnummer_id; - $data['adb_wohneinheit_id'] = ($r->adb_wohneinheit_id) ? $r->adb_wohneinheit_id : null; - $data['termination_id'] = ($r->termination_id) ? $r->termination_id : null; - - - $campaign = new Preordercampaign($r->campaign_id); - if(!$campaign->id) { - $this->layout()->setFlash("Keine Kampagne ausgewählt!", "error"); - $this->redirect("Preordercampaign"); - } - - - if($campaign->product_type != "setup_only") { - $data['product_id'] = $r->product_id; - } - if(!$r->product_id) { - $data['product_id'] = null; - } - - if($campaign->product_type != "no_setup") { - $data['setup_product_id'] = $r->setup_product_id; - } - if(!$r->setup_product_id) { - $data['setup_product_id'] = null; - } - - switch($r->type) { - case "interest": - $data['type'] = "interest"; - break; - case "provision": - $data['type'] = "provision"; - break; - case "order": - $data['type'] = "order"; - break; - } - - switch($r->connection_type) { - case "single-dwelling": - $data['connection_type'] = "single-dwelling"; - break; - case "multi-dwelling": - $data['connection_type'] = "multi-dwelling"; - break; - case "apartment-building": - $data['connection_type'] = "apartment-building"; - break; - case "apartment": - $data['connection_type'] = "apartment"; - break; - case "business": - $data['connection_type'] = "business"; - break; - } - - $data['connection_count'] = (intval($r->connection_count)) ? intval($r->connection_count) : 1; - $data['accept_agb'] = 1; - $data['accept_dsgvo'] = 1; - $data['accept_withdrawal'] = 1; - - $data['accept_marketing'] = 0; - if($r->accept_marketing == 1) { - $data['accept_marketing'] = 1; - } - $data['accept_digging'] = 0; - if($r->accept_digging== 1) { - $data['accept_digging'] = 1; - } - - $data['price'] = ($r->price) ? Layout::commaToDot($r->price) : 0; - $data['price_setup'] = ($r->price_setup) ? Layout::commaToDot($r->price_setup) : 0; - $data['price_nne'] = ($r->price_nne) ? Layout::commaToDot($r->price_nne) : 0; - $data['price_nbe'] = ($r->price_nbe) ? Layout::commaToDot($r->price_nbe) : 0; - $data['billing_delay'] = ($r->billing_delay) ? $r->billing_delay : 0; - //var_dump($r->partner_id);exit; - if($r->partner_id) { - $data['partner_id'] = $r->partner_id; - } else { - $data['partner_id'] = null; - } - - $data['company'] = (trim($r->company)) ? trim($r->company) : null; - $data['uid'] = (trim($r->uid)) ? trim($r->uid) : null; - $data['firstname'] = trim($r->firstname); - $data['lastname'] = trim($r->lastname); - $data['street'] = (trim($r->street)) ? trim($r->street) : null; - $data['housenumber'] = (trim($r->housenumber)) ? trim($r->housenumber) : null; - $data['block'] = (trim($r->block)) ? trim($r->block) : null; - $data['stiege'] = (trim($r->stiege)) ? trim($r->stiege) : null; - $data['stock'] = (trim($r->stock)) ? trim($r->stock) : null; - $data['tuer'] = (trim($r->tuer)) ? trim($r->tuer) : null; - $data['zip'] = (trim($r->zip)) ? trim($r->zip) : null; - $data['city'] = (trim($r->city)) ? trim($r->city) : null; - $data['phone'] = (trim($r->phone)) ? trim($r->phone) : null; - $data['email'] = (trim($r->email)) ? trim($r->email) : null; - $data['note'] = (trim($r->note)) ? trim($r->note) : null; - - $data['edit_by'] = $this->me->id; - - if($mode == "add") { - $data['create_by'] = $this->me->id; - $preorder = PreorderModel::create($data); - } else { - $preorder->update($data); - } - - //var_dump($preorder, $r);exit; - // handle new address creation - if(!$preorder->adb_hausnummer_id) { - // check if new address was submitted - $this->log->debug("check if new address was submitted"); - if($r->new_address_street && $r->new_address_housenumber && $r->new_address_zip && $r->new_address_city && $r->new_address_district) { - $city_search = trim($r->new_address_city); - $district_search = trim($r->new_address_district); - $zip_search = trim($r->new_address_zip); - $street_search = trim($r->new_address_street); - $housenumber_search = trim($r->new_address_housenumber); - - $block = trim($r->new_address_block); - $stiege = trim($r->new_address_stiege); - $stock = trim($r->new_address_stock); - $tuer = trim($r->new_address_tuer); - - $preorder->new_address_city = $city_search; - $preorder->new_address_district = $district_search; - $preorder->new_address_zip = $zip_search; - $preorder->new_address_street = $street_search; - $preorder->new_address_housenumber = $housenumber_search; - - - $netzgebiet_ids = []; - foreach($campaign->salesclusters as $scluster) { - $netzgebiet_ids[] = $scluster->id; + + if(!$this->request->preordercampaign_id) { + $this->layout()->setFlash("Keine Kampagne ausgewählt!", "warn"); } - $netzgebiet_id = $netzgebiet_ids[0]; - if(!$netzgebiet_id) { - $this->layout()->setFlash("Kann Adresse nicht updaten: Kampagne hat kein Netzgebiet", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); + + $campaign_id = $this->request->preordercampaign_id; + $campaign = new Preordercampaign($campaign_id); + $this->layout()->set("campaign", $campaign); + + $products = []; + foreach(ProductNetworkModel::search(["network_id" => $campaign->network_id]) as $pn) { + if(!$pn->product->active) continue; + if(!array_key_exists($pn->product_id, $products)) { + if(is_array($pn->product->attributes) && !array_key_exists("presales", $pn->product->attributes)) { + $products[$pn->product_id] = $pn->product; + } + } } - $netzgebiet = new ADBNetzgebiet($netzgebiet_id); - if(!$netzgebiet->id) { - $this->layout()->setFlash("Neztgebiet nicht gefunden", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); + //var_dump($products);exit; + $this->layout()->set("products", $products); + + $partners = AddressModel::search(['addresstype' => ['netowner', 'salespartner']]); + $this->layout()->set("partners", $partners); + } + + protected function editAction() { + $id = $this->request->id; + if(!is_numeric($id) || $id < 1) { + $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); + $this->redirect("Preordercampaign"); } - - $city = ADBGemeindeModel::getFirst(['name' => $city_search, 'netzgebiet_id' => $netzgebiet_id]); - if(!$city) { - $this->layout()->setFlash("Gemeinde nicht Adress-DB gefunden", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); + + $preorder = new Preorder($id); + if(!$preorder->id) { + $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); + $this->redirect("Preordercampaign"); } - - $district = ADBOrtschaftModel::getFirst(['name' => $district_search, 'netzgebiet_id' => $netzgebiet_id]); - if(!$district) { - $this->layout()->setFlash("Ortsteil nicht Adress-DB gefunden", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); + + $this->request->set("preordercampaign_id", $preorder->preordercampaign_id); // needed in addAction() + $this->layout()->set("preorder", $preorder); + + //var_dump($preorder->building->street);exit; + + return $this->addAction(); + + } + + protected function saveAction() { + $r = $this->request; + //var_dump($r);exit; + + /* + * add or edit + */ + $id = $r->id; + if(is_numeric($id) && $id > 0) { + $mode = "edit"; + $preorder = new Preorder($id); + if(!$preorder->id) { + $this->layout()->setFlash("Vorbestellung nicht gefunden", "error"); + $this->redirect("Preordercampaign"); + } + } else { + $id = false; + $mode = "add"; } - - $zip = ADBPlzModel::getFirst(['plz' => $zip_search, 'gemeinde_id' => $city->id]); - if(!$zip) { - $this->layout()->setFlash("PLZ nicht Adress-DB gefunden", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); + + /* + * data colletion + */ + $data = []; + $data['preordercampaign_id'] = $r->campaign_id; + $data['building_id'] = ($r->building_id) ? $r->building_id : null; + $data['adb_hausnummer_id'] = $r->adb_hausnummer_id; + $data['adb_wohneinheit_id'] = ($r->adb_wohneinheit_id) ? $r->adb_wohneinheit_id : null; + $data['termination_id'] = ($r->termination_id) ? $r->termination_id : null; + + + $campaign = new Preordercampaign($r->campaign_id); + if(!$campaign->id) { + $this->layout()->setFlash("Keine Kampagne ausgewählt!", "error"); + $this->redirect("Preordercampaign"); } - - $street = ADBStrasseModel::getFirst(['name' => $street_search, 'gemeinde_id' => $city->id]); - if(!$street) { - $this->log->debug("create street"); - $street = ADBStrasseModel::create([ - 'ortschaft_id' => $district->id, - 'gemeinde_id' => $city->id, - 'name' => $street_search - ]); - - if(!$street->save()) { - $this->layout()->setFlash("Fehler beim Speichern der neuen Straße", "error"); + + + if($campaign->product_type != "setup_only") { + $data['product_id'] = $r->product_id; + } + if(!$r->product_id) { + $data['product_id'] = null; + } + + if($campaign->product_type != "no_setup") { + $data['setup_product_id'] = $r->setup_product_id; + } + if(!$r->setup_product_id) { + $data['setup_product_id'] = null; + } + + switch($r->type) { + case "interest": + $data['type'] = "interest"; + break; + case "provision": + $data['type'] = "provision"; + break; + case "order": + $data['type'] = "order"; + break; + } + + switch($r->connection_type) { + case "single-dwelling": + $data['connection_type'] = "single-dwelling"; + break; + case "multi-dwelling": + $data['connection_type'] = "multi-dwelling"; + break; + case "apartment-building": + $data['connection_type'] = "apartment-building"; + break; + case "apartment": + $data['connection_type'] = "apartment"; + break; + case "business": + $data['connection_type'] = "business"; + break; + } + + $data['connection_count'] = (intval($r->connection_count)) ? intval($r->connection_count) : 1; + $data['accept_agb'] = 1; + $data['accept_dsgvo'] = 1; + $data['accept_withdrawal'] = 1; + + $data['accept_marketing'] = 0; + if($r->accept_marketing == 1) { + $data['accept_marketing'] = 1; + } + $data['accept_digging'] = 0; + if($r->accept_digging == 1) { + $data['accept_digging'] = 1; + } + + $data['price'] = ($r->price) ? Layout::commaToDot($r->price) : 0; + $data['price_setup'] = ($r->price_setup) ? Layout::commaToDot($r->price_setup) : 0; + $data['price_nne'] = ($r->price_nne) ? Layout::commaToDot($r->price_nne) : 0; + $data['price_nbe'] = ($r->price_nbe) ? Layout::commaToDot($r->price_nbe) : 0; + $data['billing_delay'] = ($r->billing_delay) ? $r->billing_delay : 0; + //var_dump($r->partner_id);exit; + if($r->partner_id) { + $data['partner_id'] = $r->partner_id; + } else { + $data['partner_id'] = null; + } + + $data['company'] = (trim($r->company)) ? trim($r->company) : null; + $data['uid'] = (trim($r->uid)) ? trim($r->uid) : null; + $data['firstname'] = trim($r->firstname); + $data['lastname'] = trim($r->lastname); + $data['street'] = (trim($r->street)) ? trim($r->street) : null; + $data['housenumber'] = (trim($r->housenumber)) ? trim($r->housenumber) : null; + $data['block'] = (trim($r->block)) ? trim($r->block) : null; + $data['stiege'] = (trim($r->stiege)) ? trim($r->stiege) : null; + $data['stock'] = (trim($r->stock)) ? trim($r->stock) : null; + $data['tuer'] = (trim($r->tuer)) ? trim($r->tuer) : null; + $data['zip'] = (trim($r->zip)) ? trim($r->zip) : null; + $data['city'] = (trim($r->city)) ? trim($r->city) : null; + $data['phone'] = (trim($r->phone)) ? trim($r->phone) : null; + $data['email'] = (trim($r->email)) ? trim($r->email) : null; + $data['note'] = (trim($r->note)) ? trim($r->note) : null; + + $data['edit_by'] = $this->me->id; + + if($mode == "add") { + $data['create_by'] = $this->me->id; + $preorder = PreorderModel::create($data); + } else { + $preorder->update($data); + } + + //var_dump($preorder, $r);exit; + // handle new address creation + if(!$preorder->adb_hausnummer_id) { + // check if new address was submitted + $this->log->debug("check if new address was submitted"); + if($r->new_address_street && $r->new_address_housenumber && $r->new_address_zip && $r->new_address_city && $r->new_address_district) { + $city_search = trim($r->new_address_city); + $district_search = trim($r->new_address_district); + $zip_search = trim($r->new_address_zip); + $street_search = trim($r->new_address_street); + $housenumber_search = trim($r->new_address_housenumber); + + $block = trim($r->new_address_block); + $stiege = trim($r->new_address_stiege); + $stock = trim($r->new_address_stock); + $tuer = trim($r->new_address_tuer); + + $preorder->new_address_city = $city_search; + $preorder->new_address_district = $district_search; + $preorder->new_address_zip = $zip_search; + $preorder->new_address_street = $street_search; + $preorder->new_address_housenumber = $housenumber_search; + + + $netzgebiet_ids = []; + foreach($campaign->salesclusters as $scluster) { + $netzgebiet_ids[] = $scluster->id; + } + $netzgebiet_id = $netzgebiet_ids[0]; + if(!$netzgebiet_id) { + $this->layout()->setFlash("Kann Adresse nicht updaten: Kampagne hat kein Netzgebiet", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + $netzgebiet = new ADBNetzgebiet($netzgebiet_id); + if(!$netzgebiet->id) { + $this->layout()->setFlash("Neztgebiet nicht gefunden", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + + $city = ADBGemeindeModel::getFirst(['name' => $city_search, 'netzgebiet_id' => $netzgebiet_id]); + if(!$city) { + $this->layout()->setFlash("Gemeinde nicht Adress-DB gefunden", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + + $district = ADBOrtschaftModel::getFirst(['name' => $district_search, 'netzgebiet_id' => $netzgebiet_id]); + if(!$district) { + $this->layout()->setFlash("Ortsteil nicht Adress-DB gefunden", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + + $zip = ADBPlzModel::getFirst(['plz' => $zip_search, 'gemeinde_id' => $city->id]); + if(!$zip) { + $this->layout()->setFlash("PLZ nicht Adress-DB gefunden", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + + $street = ADBStrasseModel::getFirst(['name' => $street_search, 'gemeinde_id' => $city->id]); + if(!$street) { + $this->log->debug("create street"); + $street = ADBStrasseModel::create([ + 'ortschaft_id' => $district->id, + 'gemeinde_id' => $city->id, + 'name' => $street_search + ]); + + if(!$street->save()) { + $this->layout()->setFlash("Fehler beim Speichern der neuen Straße", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + } + + + $this->log->debug("search hausnummer"); + $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => $netzgebiet_ids, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); + if($hausnummer) { + // hausnummer gibts scho! + $this->layout()->setFlash("Adresse war schon vorhanden!", "warn"); + $preorder->adb_hausnummer_id = $hausnummer->id; + } else { + // try with empty netzgebiet + $this->log->debug("search hausnummer mit empty netzgebiet"); + $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => null, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); + if($hausnummer) { + // Hausnummer ohne Netzgebiet gefunden -> update netzgebiet_id + $this->log->debug("hausnummer id: updated netzgebiet from NULL to " . $netzgebiet_ids); + $hausnummer->netzgebiet_id = $netzgebiet_id; + $hausnummer->save(); + $preorder->adb_hausnummer_id = $hausnummer->id; + } else { + // try with any netzgebiet + $this->log->debug("search hausnummer with ohne netzgebiet"); + $hausnummer = ADBHausnummerModel::getFirst(['ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); + if($hausnummer) { + $this->log->debug("Hausnummer " . $hausnummer->id . " in Netzgebiet (" . implode(",", $netzgebiet_ids) . " gesucht, aber in " . $hausnummer->netzgebiet_id) . " gefunden"; + $this->layout()->setFlash("Neue Adresse ist bereits im Netzgebiet " . $hausnummer->netzgebiet->name . " vorhanden", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } else { + // hausnummer anlegen + $hausnummer = ADBHausnummerModel::create([ + 'netzgebiet_id' => $netzgebiet_id, + 'ortschaft_id' => $district->id, + 'plz_id' => $zip->id, + 'strasse_id' => $street->id, + 'hausnummer' => $housenumber_search, + 'freigabe' => $netzgebiet->freigabe, + 'manual_add' => date('U'), + 'manual_add_by' => $this->me->id, + 'manual_add_info' => "thetool user " . $this->me->username . " via Preorder create" + ]); + + if(!$hausnummer->save()) { + $this->layout()->setFlash("Fehler beim Speichern der neuen Adresse", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + $preorder->adb_hausnummer_id = $hausnummer->id; + $preorder->address_created = date('U'); + $preorder->address_created_by = $this->me->id; + $preorder->adb_wohneinheit_id = null; + + // create wohneinheit + $wohneinheit = ADBWohneinheitModel::create([ + 'hausnummer_id' => $hausnummer->id, + 'num' => 1, + 'block' => ($block) ? $block : null, + 'stiege' => ($stiege) ? $stiege : null, + 'stock' => ($stock) ? $stock : null, + 'tuer' => ($tuer) ? $tuer : null + ]); + if($wohneinheit->save()) { + $preorder->adb_wohneinheit_id = $wohneinheit->id; + } else { + $this->layout()->setFlash("Konnte Wohneinheit nicht speichern", "warn"); + } + + } + } + } + + } + } + + /* + * validation + */ + + if(!array_key_exists($data['type'], $campaign->types)) { + $this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); - } } - - $this->log->debug("search hausnummer"); - $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => $netzgebiet_ids, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); - if($hausnummer) { - // hausnummer gibts scho! - $this->layout()->setFlash("Adresse war schon vorhanden!", "warn"); - $preorder->adb_hausnummer_id = $hausnummer->id; - } else { - // try with empty netzgebiet - $this->log->debug("search hausnummer mit empty netzgebiet"); - $hausnummer = ADBHausnummerModel::getFirst(['netzgebiet_id' => null, 'ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); - if($hausnummer) { - // Hausnummer ohne Netzgebiet gefunden -> update netzgebiet_id - $this->log->debug("hausnummer id: updated netzgebiet from NULL to ".$netzgebiet_ids); - $hausnummer->netzgebiet_id = $netzgebiet_id; - $hausnummer->save(); - $preorder->adb_hausnummer_id = $hausnummer->id; - } else { - // try with any netzgebiet - $this->log->debug("search hausnummer with ohne netzgebiet"); - $hausnummer = ADBHausnummerModel::getFirst(['ortschaft_id' => $district_search, 'gemeinde_id' => $city->id, 'plz_id' => $zip->id, 'strasse_id' => $street->id, 'hausnummer' => $housenumber_search]); - if($hausnummer) { - $this->log->debug("Hausnummer ".$hausnummer->id." in Netzgebiet (".implode(",", $netzgebiet_ids)." gesucht, aber in ".$hausnummer->netzgebiet_id)." gefunden"; - $this->layout()->setFlash("Neue Adresse ist bereits im Netzgebiet ".$hausnummer->netzgebiet->name." vorhanden", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); - } else { - // hausnummer anlegen - $hausnummer = ADBHausnummerModel::create([ - 'netzgebiet_id' => $netzgebiet_id, - 'ortschaft_id' => $district->id, - 'plz_id' => $zip->id, - 'strasse_id' => $street->id, - 'hausnummer' => $housenumber_search, - 'freigabe' => $netzgebiet->freigabe, - 'manual_add' => date('U'), - 'manual_add_by' => $this->me->id, - 'manual_add_info' => "thetool user ".$this->me->username." via Preorder create" - ]); - - if(!$hausnummer->save()) { - $this->layout()->setFlash("Fehler beim Speichern der neuen Adresse", "error"); + if($data['product_id']) { + $product = new Product($data['product_id']); + if(!$product->id) { + $this->layout()->setFlash("Bitte Produkt auswählen!", "error"); $this->layout()->set("preorder", $preorder); $this->layout()->set("campaign", $campaign); return $this->addAction(); - } - $preorder->adb_hausnummer_id = $hausnummer->id; - $preorder->address_created = date('U'); - $preorder->address_created_by = $this->me->id; - $preorder->adb_wohneinheit_id = null; - - // create wohneinheit - $wohneinheit = ADBWohneinheitModel::create([ - 'hausnummer_id' => $hausnummer->id, - 'num' => 1, - 'block' => ($block) ? $block : null, - 'stiege' => ($stiege) ? $stiege : null, - 'stock' => ($stock) ? $stock : null, - 'tuer' => ($tuer) ? $tuer : null - ]); - if($wohneinheit->save()) { - $preorder->adb_wohneinheit_id = $wohneinheit->id; - } else { - $this->layout()->setFlash("Konnte Wohneinheit nicht speichern", "warn"); - } - } - } - } - - } - } - - /* - * validation - */ - - if(!array_key_exists($data['type'], $campaign->types)) { - $this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); - } - - if($data['product_id']) { - $product = new Product($data['product_id']); - if(!$product->id) { - $this->layout()->setFlash("Bitte Produkt auswählen!", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); - } - - $preorder->billing_period = $product->billing_period; - - if(!$this->me->isAdmin()) { - $preorder->price_nne = $product->price_nne; - $preorder->price_nbe = $product->price_nbe; - } - - if(!strlen($preorder->price) - || !strlen($preorder->price_setup) - || !strlen($preorder->price_nne) - || !strlen($preorder->price_nbe) - || !strlen($preorder->price_nne)) { - $this->layout()->setFlash("Bitte alle benötigten Produktdaten ausfüllen!", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); - } - if(!strlen($preorder->firstname) - || !strlen($preorder->lastname) - || !strlen($preorder->street) - || !strlen($preorder->zip) - || !strlen($preorder->city)) { - $this->layout()->setFlash("Bitte alle benötigten Kundendaten ausfüllen!", "error"); - $this->layout()->set("preorder", $preorder); - $this->layout()->set("campaign", $campaign); - return $this->addAction(); - } - } else { - $preorder->billing_period = 0; - } - - //var_dump($preorder);exit; - - // unset temporary properties - unset($preorder->new_address_city); - unset($preorder->new_address_district); - unset($preorder->new_address_zip); - unset($preorder->new_address_street); - unset($preorder->new_address_housenumber); - - /* - * generate ucode and save - */ - if(!$preorder->ucode) { - $preorder->createUcode(); - } - $new_id = $preorder->save(); - if(!$new_id) { - $this->layout()->setFlash("Fehler beim Speichern", "error"); - $this->layout()->set("preorder", $preorder); - return $this->addAction(); - } - - - $qs = ['filter' => ['preordercampaign_id' => $preorder->preordercampaign_id]]; - $qs = http_build_query($qs); - - $this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success"); - $this->redirect("Preorder", "Index", $qs); - } - - - public function deleteAction() { - $qs = ""; - - if(is_array($this->request->filter) && count($this->request->filter)) { - $qs = ['filter' => $this->request->filter]; - $qs = http_build_query($qs); - } - - $id = $this->request->id; - if(!is_numeric($id) || $id < 1) { - $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); - $this->redirect("Preorder", "Index", $qs); - } - - $preorder = new Preorder($id); - if(!$preorder->id) { - $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); - $this->redirect("Preorder", "Index", $qs); - } - - $preorder->deleted = date('U'); - $preorder->deleted_by = $this->me->id; - $preorder->status_id = 23; // 910 - Cancelled (ohne weitere Begründung) - $preorder->save(); - - $this->layout()->setFlash("Vorbestellung erfolgreich gelöscht!", "success"); - $this->redirect("Preorder", "Index", $qs); - - } - + $preorder->billing_period = $product->billing_period; - protected function statusupdateimport() { - $this->layout()->setTemplate("Preorder/Statusupdateimport"); - } - - protected function saveStatusupdateimport() { - $headline_included = $this->request->headline; - - if(is_array($_FILES) && array_key_exists("statusupdate_csv", $_FILES) && !$_FILES['statusupdate_csv']['error']) { - // look for uploaded import file - try { - // returns File object or throws Exception on error - $file = mfUpload::handleFormUpload("statusupdate_csv"); - } catch(Exception $ex) { - $this->layout()->setFlash("Fehler beim Dateiupload: " . $ex->getMessage(), "error"); - $this->redirect("Preorder", "statusupdateimport"); - } - - $i = 0; - $forbidden = 0; - $notfound = 0; - $invalidcode = 0; - $nochange = 0; - $saved = 0; - $flags_saved = 0; - - $statusflags = []; - - $filename = $file->getFullPath(); - $input = fopen($filename, "r"); - while($csv = fgetcsv($input, 0, ";")) { - $i++; - - if($i == 1 && $headline_included) { - // get statusflag order in header - $col = 2; - while(array_key_exists($col, $csv) && trim($csv[$col])) { - $code = trim($csv[$col]); - if(!is_numeric($code)) { - $this->layout()->setFlash("Ungültige Überschrift für Spalte ".++$col, "error"); - $this->redirect("Preorder", "statusupdateimport"); - } - - $sflag = PreorderStatusflagModel::getFirst(["code" => $code]); - if(!$sflag) { - $this->layout()->setFlash("Statusflag mit Code $code nicht gefunden", "error"); - $this->redirect("Preorder", "statusupdateimport"); - } - $sflag->col = $col; - $statusflags[$code] = $sflag; - $col++; - } - continue; - } - - if(!trim($csv[0])) { - continue; - } - - $oaid = trim($csv[0]); - $new_status_code = trim($csv[1]); - - $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); - if(!$preorder) { - $notfound++; - continue; - } - - if($preorder->campaign->network->owner_id != $this->me->address_id) { - $forbidden++; - continue; - } - - if($preorder->status->code != $new_status_code) { - $new_status = PreorderstatusModel::getFirst(["code" => $new_status_code]); - if(!$new_status_code) { - $invalidcode++; - continue; - } - $preorder->status_id = $new_status->id; - $preorder->save(); - $preorder->resetSaveNesting(); - $saved++; - } else { - $nochange++; - } - - if(count($statusflags)) { - foreach($statusflags as $code => $origin_sflag) { - $this->log->debug(__METHOD__.": $oaid - testing flag $code for update."); - $sflag = clone($origin_sflag); - $sflag->preorder_id = $preorder->id; - - if(!$sflag->col) { - $this->layout()->setFlash("Kann Statusflagcode $code nicht zuordnen. Line $i col ".$sflag->col, "error"); - $this->redirect("Preorder", "statusupdateimport"); - } - - if(!array_key_exists($sflag->col, $csv)) { - $this->log->debug(__METHOD__.": no col."); - continue; - } - - $value = trim($csv[$sflag->col]); - if(!strlen($value)) { - $this->log->debug(__METHOD__.": no val"); - continue; - } - - if($value) { - $sflag->value->value = 1; - } else { - $sflag->value->value = 0; - } - - $this->log->debug(__METHOD__.": $oaid - saving flag value $code value: ".$sflag->value->value." ($value)"); - $sflag->value->save(); - - $flags_saved++; - //$this->log->debug(__METHOD__.": $oaid - loading preorder again"); - } - - $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); - $preorder->resetSaveNesting(); - $preorder->afterSave(); - $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); - $preorder->resetSaveNesting(); - } - - } - - $message = "Import erfolgreich. $saved Statusupdates importiert"; - if($flags_saved) { - $message .= "
$flags_saved Statusflags upgedatet"; - } - if($notfound) { - $message .= "
$notfound Bestellungen nicht gefunden"; - } - if($forbidden) { - $message .= "
$forbidden Bestellungen in falschem Netzgebiet"; - } - /*if($nochange) { - $message .= "
$nochange Bestelllungen haben bereits den neuen Status"; - }*/ - if($invalidcode) { - $message .= "
$invalidcode ungültige Statuscodes"; - } - $this->layout()->setFlash($message); - $this->redirect("Preorder", "statusupdateimport"); - - } else { - $this->layout()->setFlash("Nichts importiert!", "info"); - $this->redirect("Preorder", "statusupdateimport"); - } - } - - protected function exportAction() { - $rfilter = $this->request->filter; - if(!is_array($rfilter)) { - $rfilter = []; - } - $filter = $this->getPreparedFilter($rfilter); - - - if($this->me->is("Admin")) { - $my_networks = NetworkModel::getAll(); - } else { - $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); - } - - $netzgebiet_ids = []; - $my_adb_networks = []; - foreach($my_networks as $network) { - if($network->adb_netzgebiet_id && !in_array($network->adb_netzgebiet_id, $netzgebiet_ids)) { - $netzgebiet_ids[] = $network->id; - $my_adb_networks[$network->adb_netzgebiet_id] = new ADBNetzgebiet($network->adb_netzgebiet_id); - } - } - - unset($filter['network_id']); - $preorder_filter = $filter; - - $campaign_ids = []; - foreach(PreordercampaignModel::search(["network_id" => $netzgebiet_ids]) as $campaign) { - if(!in_array($campaign->id, $campaign_ids)) { - $campaign_ids[] = $campaign->id; - } - } - - if(array_key_exists("preordercampaign_id", $filter) && in_array($filter['preordercampaign_id'], $campaign_ids)) { - $preorder_filter["preordercampaign_id"] = $filter['preordercampaign_id']; - } else { - $preorder_filter["preordercampaign_id"] = $campaign_ids; - } - - //$preorder_filter['layout()->setTemplate("Preorder/export.csv"); - $this->layout()->set("res", $res); - } - - protected function apiAction() { - if(!$this->me->is(["Admin","netowner","salespartner","preorderfront"])) { - $this->redirect("Dashboard"); - } - $do = $this->request->do; - $data = []; - - switch($do) { - case "saveAttribute": - $return = $this->saveAttributeApi(); - break; - case "getFilteredPreorders": - $return = $this->getFilteredPreordersApi(); - break; - case "updateStatus": - $return = $this->updateStatusApi(); - break; - case "deleteWorkorder": - $return = $this->deleteWorkorderApi(); - break; - case "savePatchposition": - $return = $this->savePatchpositionApi(); - break; - case "setStatusFlag": - $return = $this->setStatusFlagApi(); - break; - default: - $return = false; - } - - if(!is_array($return) || !count($return)) { - $data = ["status" => "error"]; - $this->returnJson($data); - } - $data['status'] = "OK"; - $data['result'] = $return; - $this->returnJson($data); - } - - private function setStatusFlagApi() { - $preorder_id = $this->request->preorder_id; - $flag_id = $this->request->flag_id; - $value = $this->request->value; - - if(!$preorder_id || !$flag_id) { - return false; - } - - $flag = new PreorderStatusflag($flag_id); - if(!$flag->id) { - return false; - } - - $flagvalue = PreorderStatusflagValueModel::getFirst(["preorder_id" => $preorder_id, "flag_id" => $flag_id]); - if(!$flagvalue) { - $flagvalue = PreorderStatusflagValueModel::create([ - "preorder_id" => $preorder_id, - "flag_id" => $flag_id - ]); - } - - $flagvalue->value = ($value) ? 1 : 0; - //var_dump($flagvalue);exit; - try { - if(!$flagvalue->save()) { - return false; - } - } catch(Exception $e) { - $this->log->debug($e->getTraceAsString()); - } - - return ["message" => "Statusflag saved successfully"]; - } - - private function getFilteredPreordersApi() { - $preorders = []; - $filter = []; - if(is_array($this->request->filter)) { - $filter = $this->request->filter; - } - - $filter = $this->getPreparedFilter($filter); - - $my_campaign_ids = []; - - if($this->me->is("Admin")) { - $my_networks = NetworkModel::getAll(); - } else { - if($this->me->is("preorderfront")) { - $pns = json_decode($this->me->getFlag("preorder_networks")); - if(is_array($pns) && count($pns)) { - foreach($pns as $pn_id) { - $my_networks[] = new Network($pn_id); - } - } else { - $my_networks = $this->me->myNetworks(['netowner','salespartner']); - } - //var_dump($my_networks);exit; - } else { - $my_networks = $this->me->myNetworks(['netowner','salespartner']); - } - - // check users allowed networks - $user_network_ids = $this->me->getFlag("preorder_networks")->value(); - if($user_network_ids) { - $user_network_ids = json_decode($user_network_ids); - } - - if(is_array($user_network_ids) && count($user_network_ids)) { - if(!$my_networks) { - foreach($user_network_ids as $mnid) { - $my_networks[] = new Network($mnid); - } - } else { - //var_dump($user_network_ids, $my_networks);exit; - $new_my_networks = []; - foreach($my_networks as $network) { - if(in_array($network->id, $user_network_ids)) { - $new_my_networks[$network->id] = $network; + if(!$this->me->isAdmin()) { + $preorder->price_nne = $product->price_nne; + $preorder->price_nbe = $product->price_nbe; } - } - $my_networks = $new_my_networks; + + if(!strlen($preorder->price) + || !strlen($preorder->price_setup) + || !strlen($preorder->price_nne) + || !strlen($preorder->price_nbe) + || !strlen($preorder->price_nne)) { + $this->layout()->setFlash("Bitte alle benötigten Produktdaten ausfüllen!", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + + if(!strlen($preorder->firstname) + || !strlen($preorder->lastname) + || !strlen($preorder->street) + || !strlen($preorder->zip) + || !strlen($preorder->city)) { + $this->layout()->setFlash("Bitte alle benötigten Kundendaten ausfüllen!", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + } else { + $preorder->billing_period = 0; } - } - - - foreach($my_networks as $network) { - foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { - $my_campaigns[] = $campaign; - if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; + + //var_dump($preorder);exit; + + // unset temporary properties + unset($preorder->new_address_city); + unset($preorder->new_address_district); + unset($preorder->new_address_zip); + unset($preorder->new_address_street); + unset($preorder->new_address_housenumber); + + /* + * generate ucode and save + */ + if(!$preorder->ucode) { + $preorder->createUcode(); } - } - - if(array_key_exists("preordercampaign_id", $filter)) { - if(!in_array($filter['preordercampaign_id'], $my_campaign_ids)) { - $filter['preordercampaign_id'] = $my_campaign_ids; + $new_id = $preorder->save(); + if(!$new_id) { + $this->layout()->setFlash("Fehler beim Speichern", "error"); + $this->layout()->set("preorder", $preorder); + return $this->addAction(); } - } else { - $filter['preordercampaign_id'] = $my_campaign_ids; - } - } - - if(!$filter['preordercampaign_id']) $filter['preordercampaign_id'] = 0; - - //var_dump($filter);exit; - $results = PreorderModel::searchActive($filter); - foreach($results as $preorder) { - //$this->log->debug("building status: ".print_r($building->status,true)); - $data = clone($preorder->data); - unset($data->workorder_export_data); - unset($data->submit_request); - unset($data->addon_services); - $data->id = $preorder->id; - $data->status_code = $preorder->status->code; - $data->adrcd = $preorder->adb_hausnummer->adrcd; - $data->extref = $preorder->adb_hausnummer->extref; - $data->adb_strasse = $preorder->adb_hausnummer->strasse->name; - $data->adb_hausnummer = $preorder->adb_hausnummer->hausnummer; - $data->adb_plz = $preorder->adb_hausnummer->plz->plz; - $data->adb_ort = $preorder->adb_hausnummer->ortschaft->name; - $data->adb_gemeinde = $preorder->adb_hausnummer->strasse->gemeinde->name; - $data->gps_lat = $preorder->adb_hausnummer->gps_lat; - $data->gps_long = $preorder->adb_hausnummer->gps_long; - - if($this->me->is("Admin")) { - $data->borderpoint_lat = ($preorder->adb_hausnummer->borderpoint_lat) ? json_decode($preorder->adb_hausnummer->borderpoint_lat) : null; - $data->borderpoint_long = ($preorder->adb_hausnummer->borderpoint_long) ? json_decode($preorder->adb_hausnummer->borderpoint_long) : null; - //$data->trenches = ($preorder->adb_hausnummer->trenches) ? json_decode($preorder->adb_hausnummer->trenches) : null; - $data->home_trench = ($preorder->adb_hausnummer->home_trench) ? json_decode($preorder->adb_hausnummer->home_trench) : null; - } - - $data->type_label = __($data->type, "preorder"); - $data->connection_type_label = __($data->connection_type, "preorder"); - - $preorders[] = $data; - } - - return ["preorders" => $preorders]; - } - - private function saveAttributeApi() { - $preorder_id = $this->request->id; - if(!is_numeric($preorder_id) || $preorder_id < 1) { - return false; - } - - $preorder = new Preorder($preorder_id); - if(!$preorder->id) { - return false; - } - - $attribute = $this->request->attribute; - if(!$attribute) { - return false; - } - - $value = $this->request->value; - $attribs = $preorder->attribute; - if(!$attribs) { - $attribs = []; - } - - $attribs[$attribute] = $value ? 1 : 0; - $preorder->attributes = json_encode($attribs); - if($preorder->save()) { - return ["id" => $preorder_id, "attribute" => $attribute, "update" => date("d.m.Y H:i", $preorder->edit)]; - } else { - $this->returnJson(["status" => "error", "result" => ["id" => $preorder_id, "attribute" => $attribute]]); - } - - } - - private function updateStatusApi() { - $preorder_id = $this->request->id; - - if(!is_numeric($preorder_id) || $preorder_id < 1) { - return false; - } - - $preorder = new Preorder($preorder_id); - if(!$preorder->id) { - return false; - } - - $status_id = $this->request->status_id; - if(!is_numeric($status_id) || $status_id < 1) { - return false; - } - - $status = new Preorderstatus($status_id); - if(!$status->id) { - return false; - } - - $preorder->status_id = $status_id; - $preorder->edit_by = $this->me->id; - $preorder->save(); - - $update = []; - - foreach(PreorderModel::searchActive(["adb_hausnummer_id" => $preorder->adb_hausnummer_id]) as $affected_preorder) { - $up = [ - "id" => $affected_preorder->id, - "sid" => $affected_preorder->status_id, - "code" => $affected_preorder->status->code, - "text" => $affected_preorder->status->name, - "bcode" => $affected_preorder->adb_hausnummer->status->code, - "btext" => $affected_preorder->adb_hausnummer->status->name, - "ciftoken" => $affected_preorder->ciftoken, - "cifurl" => $affected_preorder->cifurl, - "cifcableurl" => $affected_preorder->cifcableurl, - ]; - if($preorder->adb_wohneinheit_id) { - $up["ucode"] = $affected_preorder->adb_wohneinheit->status->code; - $up["utext"] = $affected_preorder->adb_wohneinheit->status->name; - } - - $update[] = $up; - } - - return ["message" => "Status saved successfully", "id" => $preorder_id, "updates" => $update]; - } - - private function savePatchpositionApi() { - $preorder_id = $this->request->id; - - $cluster = $this->request->cluster; - $shelf = $this->request->shelf; - $module = $this->request->module; - $port = $this->request->port; - - if(!is_numeric($preorder_id) || $preorder_id < 1) { - return false; - } - - $preorder = new Preorder($preorder_id); - if(!$preorder->id) { - return false; - } - - if(!$preorder->adb_wohneinheit_id) { - return false; - } - - $we = $preorder->adb_wohneinheit; - if($cluster && $cluster != $we->cluster) { - $we->patch_cluster = $cluster; - } - $we->patch_shelf = $shelf; - $we->patch_module = $module; - $we->patch_port = $port; - $we->save(); - $preorder->save(); - - return ["message" => "Patchposition saved successfully", "id" => $preorder->id]; - - } - - private function deleteWorkorderApi() { - if(!$this->me->is("Admin")) { - return false; + + $qs = ['filter' => ['preordercampaign_id' => $preorder->preordercampaign_id]]; + $qs = http_build_query($qs); + + $this->layout()->setFlash("Vorbestellung erfolgreich gespeichert!", "success"); + $this->redirect("Preorder", "Index", $qs); } - $preorder_id = $this->request->id; - $wo_id = $this->request->wid; - - if(!is_numeric($preorder_id) || $preorder_id < 1) { - return false; - } - - $preorder = new Preorder($preorder_id); - if(!$preorder->id) { - return false; - } - - if(!$preorder->adb_wohneinheit_id) { - return false; + + public function deleteAction() { + $qs = ""; + + if(is_array($this->request->filter) && count($this->request->filter)) { + $qs = ['filter' => $this->request->filter]; + $qs = http_build_query($qs); + } + + $id = $this->request->id; + if(!is_numeric($id) || $id < 1) { + $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); + $this->redirect("Preorder", "Index", $qs); + } + + $preorder = new Preorder($id); + if(!$preorder->id) { + $this->layout()->setFlash("Vorbestellung nicht gefunden!", "error"); + $this->redirect("Preorder", "Index", $qs); + } + + $preorder->deleted = date('U'); + $preorder->deleted_by = $this->me->id; + $preorder->status_id = 23; // 910 - Cancelled (ohne weitere Begründung) + $preorder->save(); + + $this->layout()->setFlash("Vorbestellung erfolgreich gelöscht!", "success"); + $this->redirect("Preorder", "Index", $qs); + } - if(!is_numeric($wo_id) || $wo_id < 1) { - return false; - } - $workorder = new RimoWorkorder($wo_id); - if(!$workorder->id) { - return false; + + protected function statusupdateimport() { + $this->layout()->setTemplate("Preorder/Statusupdateimport"); } - if($preorder->adb_wohneinheit_id != $workorder->adb_wohneinheit_id) { - $this->log->warning(__METHOD__.": wohneinheit_id not equal"); - return false; + protected function saveStatusupdateimport() { + $headline_included = $this->request->headline; + + if(is_array($_FILES) && array_key_exists("statusupdate_csv", $_FILES) && !$_FILES['statusupdate_csv']['error']) { + // look for uploaded import file + try { + // returns File object or throws Exception on error + $file = mfUpload::handleFormUpload("statusupdate_csv"); + } catch(Exception $ex) { + $this->layout()->setFlash("Fehler beim Dateiupload: " . $ex->getMessage(), "error"); + $this->redirect("Preorder", "statusupdateimport"); + } + + $i = 0; + $forbidden = 0; + $notfound = 0; + $invalidcode = 0; + $nochange = 0; + $saved = 0; + $flags_saved = 0; + + $statusflags = []; + + $filename = $file->getFullPath(); + $input = fopen($filename, "r"); + while($csv = fgetcsv($input, 0, ";")) { + $i++; + + if($i == 1 && $headline_included) { + // get statusflag order in header + $col = 2; + while(array_key_exists($col, $csv) && trim($csv[$col])) { + $code = trim($csv[$col]); + if(!is_numeric($code)) { + $this->layout()->setFlash("Ungültige Überschrift für Spalte " . ++$col, "error"); + $this->redirect("Preorder", "statusupdateimport"); + } + + $sflag = PreorderStatusflagModel::getFirst(["code" => $code]); + if(!$sflag) { + $this->layout()->setFlash("Statusflag mit Code $code nicht gefunden", "error"); + $this->redirect("Preorder", "statusupdateimport"); + } + $sflag->col = $col; + $statusflags[$code] = $sflag; + $col++; + } + continue; + } + + if(!trim($csv[0])) { + continue; + } + + $oaid = trim($csv[0]); + $new_status_code = trim($csv[1]); + + $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); + if(!$preorder) { + $notfound++; + continue; + } + + if($preorder->campaign->network->owner_id != $this->me->address_id) { + $forbidden++; + continue; + } + + if($preorder->status->code != $new_status_code) { + $new_status = PreorderstatusModel::getFirst(["code" => $new_status_code]); + if(!$new_status_code) { + $invalidcode++; + continue; + } + $preorder->status_id = $new_status->id; + $preorder->save(); + $preorder->resetSaveNesting(); + $saved++; + } else { + $nochange++; + } + + if(count($statusflags)) { + foreach($statusflags as $code => $origin_sflag) { + $this->log->debug(__METHOD__ . ": $oaid - testing flag $code for update."); + $sflag = clone($origin_sflag); + $sflag->preorder_id = $preorder->id; + + if(!$sflag->col) { + $this->layout()->setFlash("Kann Statusflagcode $code nicht zuordnen. Line $i col " . $sflag->col, "error"); + $this->redirect("Preorder", "statusupdateimport"); + } + + if(!array_key_exists($sflag->col, $csv)) { + $this->log->debug(__METHOD__ . ": no col."); + continue; + } + + $value = trim($csv[$sflag->col]); + if(!strlen($value)) { + $this->log->debug(__METHOD__ . ": no val"); + continue; + } + + if($value) { + $sflag->value->value = 1; + } else { + $sflag->value->value = 0; + } + + $this->log->debug(__METHOD__ . ": $oaid - saving flag value $code value: " . $sflag->value->value . " ($value)"); + $sflag->value->save(); + + $flags_saved++; + //$this->log->debug(__METHOD__.": $oaid - loading preorder again"); + } + + $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); + $preorder->resetSaveNesting(); + $preorder->afterSave(); + $preorder = PreorderModel::getFirstActive(["oaid" => $oaid]); + $preorder->resetSaveNesting(); + } + + } + + $message = "Import erfolgreich. $saved Statusupdates importiert"; + if($flags_saved) { + $message .= "
$flags_saved Statusflags upgedatet"; + } + if($notfound) { + $message .= "
$notfound Bestellungen nicht gefunden"; + } + if($forbidden) { + $message .= "
$forbidden Bestellungen in falschem Netzgebiet"; + } + /*if($nochange) { + $message .= "
$nochange Bestelllungen haben bereits den neuen Status"; + }*/ + if($invalidcode) { + $message .= "
$invalidcode ungültige Statuscodes"; + } + $this->layout()->setFlash($message); + $this->redirect("Preorder", "statusupdateimport"); + + } else { + $this->layout()->setFlash("Nichts importiert!", "info"); + $this->redirect("Preorder", "statusupdateimport"); + } } - - $workorder->delete(); - return ["message" => "Workorder deleted successfully", "id" => $preorder->id, "wid" => $wo_id]; - } - + + protected function exportAction() { + $rfilter = $this->request->filter; + if(!is_array($rfilter)) { + $rfilter = []; + } + $filter = $this->getPreparedFilter($rfilter); + + + if($this->me->is("Admin")) { + $my_networks = NetworkModel::getAll(); + } else { + $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); + } + + $netzgebiet_ids = []; + $my_adb_networks = []; + foreach($my_networks as $network) { + if($network->adb_netzgebiet_id && !in_array($network->adb_netzgebiet_id, $netzgebiet_ids)) { + $netzgebiet_ids[] = $network->id; + $my_adb_networks[$network->adb_netzgebiet_id] = new ADBNetzgebiet($network->adb_netzgebiet_id); + } + } + + unset($filter['network_id']); + $preorder_filter = $filter; + + $campaign_ids = []; + foreach(PreordercampaignModel::search(["network_id" => $netzgebiet_ids]) as $campaign) { + if(!in_array($campaign->id, $campaign_ids)) { + $campaign_ids[] = $campaign->id; + } + } + + if(array_key_exists("preordercampaign_id", $filter) && in_array($filter['preordercampaign_id'], $campaign_ids)) { + $preorder_filter["preordercampaign_id"] = $filter['preordercampaign_id']; + } else { + $preorder_filter["preordercampaign_id"] = $campaign_ids; + } + + //$preorder_filter['layout()->setTemplate("Preorder/export.csv"); + $this->layout()->set("res", $res); + } + + protected function apiAction() { + if(!$this->me->is(["Admin", "netowner", "salespartner", "preorderfront"])) { + $this->redirect("Dashboard"); + } + $do = $this->request->do; + $data = []; + + switch($do) { + case "saveAttribute": + $return = $this->saveAttributeApi(); + break; + case "getFilteredPreorders": + $return = $this->getFilteredPreordersApi(); + break; + case "updateStatus": + $return = $this->updateStatusApi(); + break; + case "deleteWorkorder": + $return = $this->deleteWorkorderApi(); + break; + case "savePatchposition": + $return = $this->savePatchpositionApi(); + break; + case "setStatusFlag": + $return = $this->setStatusFlagApi(); + break; + default: + $return = false; + } + + if(!is_array($return) || !count($return)) { + $data = ["status" => "error"]; + $this->returnJson($data); + } + $data['status'] = "OK"; + $data['result'] = $return; + $this->returnJson($data); + } + + private function setStatusFlagApi() { + $preorder_id = $this->request->preorder_id; + $flag_id = $this->request->flag_id; + $value = $this->request->value; + + if(!$preorder_id || !$flag_id) { + return false; + } + + $flag = new PreorderStatusflag($flag_id); + if(!$flag->id) { + return false; + } + + $flagvalue = PreorderStatusflagValueModel::getFirst(["preorder_id" => $preorder_id, "flag_id" => $flag_id]); + if(!$flagvalue) { + $flagvalue = PreorderStatusflagValueModel::create([ + "preorder_id" => $preorder_id, + "flag_id" => $flag_id + ]); + } + + $flagvalue->value = ($value) ? 1 : 0; + //var_dump($flagvalue);exit; + try { + if(!$flagvalue->save()) { + return false; + } + } catch(Exception $e) { + $this->log->debug($e->getTraceAsString()); + } + + return ["message" => "Statusflag saved successfully"]; + } + + private function getFilteredPreordersApi() { + $preorders = []; + $filter = []; + if(is_array($this->request->filter)) { + $filter = $this->request->filter; + } + + $filter = $this->getPreparedFilter($filter); + + $my_campaign_ids = []; + + if($this->me->is("Admin")) { + $my_networks = NetworkModel::getAll(); + } else { + if($this->me->is("preorderfront")) { + $pns = json_decode($this->me->getFlag("preorder_networks")); + if(is_array($pns) && count($pns)) { + foreach($pns as $pn_id) { + $my_networks[] = new Network($pn_id); + } + } else { + $my_networks = $this->me->myNetworks(['netowner', 'salespartner']); + } + //var_dump($my_networks);exit; + } else { + $my_networks = $this->me->myNetworks(['netowner', 'salespartner']); + } + + // check users allowed networks + $user_network_ids = $this->me->getFlag("preorder_networks")->value(); + if($user_network_ids) { + $user_network_ids = json_decode($user_network_ids); + } + + if(is_array($user_network_ids) && count($user_network_ids)) { + if(!$my_networks) { + foreach($user_network_ids as $mnid) { + $my_networks[] = new Network($mnid); + } + } else { + //var_dump($user_network_ids, $my_networks);exit; + $new_my_networks = []; + foreach($my_networks as $network) { + if(in_array($network->id, $user_network_ids)) { + $new_my_networks[$network->id] = $network; + } + } + $my_networks = $new_my_networks; + } + } + + + foreach($my_networks as $network) { + foreach(PreordercampaignModel::search(['network_id' => $network->id]) as $campaign) { + $my_campaigns[] = $campaign; + if(!in_array($campaign->id, $my_campaign_ids)) $my_campaign_ids[] = $campaign->id; + } + } + + if(array_key_exists("preordercampaign_id", $filter)) { + if(!in_array($filter['preordercampaign_id'], $my_campaign_ids)) { + $filter['preordercampaign_id'] = $my_campaign_ids; + } + } else { + $filter['preordercampaign_id'] = $my_campaign_ids; + } + } + + if(!$filter['preordercampaign_id']) $filter['preordercampaign_id'] = 0; + + //var_dump($filter);exit; + $results = PreorderModel::searchActive($filter); + foreach($results as $preorder) { + //$this->log->debug("building status: ".print_r($building->status,true)); + $data = clone($preorder->data); + unset($data->workorder_export_data); + unset($data->submit_request); + unset($data->addon_services); + $data->id = $preorder->id; + $data->status_code = $preorder->status->code; + $data->adrcd = $preorder->adb_hausnummer->adrcd; + $data->extref = $preorder->adb_hausnummer->extref; + $data->adb_strasse = $preorder->adb_hausnummer->strasse->name; + $data->adb_hausnummer = $preorder->adb_hausnummer->hausnummer; + $data->adb_plz = $preorder->adb_hausnummer->plz->plz; + $data->adb_ort = $preorder->adb_hausnummer->ortschaft->name; + $data->adb_gemeinde = $preorder->adb_hausnummer->strasse->gemeinde->name; + $data->gps_lat = $preorder->adb_hausnummer->gps_lat; + $data->gps_long = $preorder->adb_hausnummer->gps_long; + + if($this->me->is("Admin")) { + $data->borderpoint_lat = ($preorder->adb_hausnummer->borderpoint_lat) ? json_decode($preorder->adb_hausnummer->borderpoint_lat) : null; + $data->borderpoint_long = ($preorder->adb_hausnummer->borderpoint_long) ? json_decode($preorder->adb_hausnummer->borderpoint_long) : null; + //$data->trenches = ($preorder->adb_hausnummer->trenches) ? json_decode($preorder->adb_hausnummer->trenches) : null; + $data->home_trench = ($preorder->adb_hausnummer->home_trench) ? json_decode($preorder->adb_hausnummer->home_trench) : null; + } + + $data->type_label = __($data->type, "preorder"); + $data->connection_type_label = __($data->connection_type, "preorder"); + + $preorders[] = $data; + } + + return ["preorders" => $preorders]; + } + + private function saveAttributeApi() { + $preorder_id = $this->request->id; + if(!is_numeric($preorder_id) || $preorder_id < 1) { + return false; + } + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + return false; + } + + $attribute = $this->request->attribute; + if(!$attribute) { + return false; + } + + $value = $this->request->value; + $attribs = $preorder->attribute; + if(!$attribs) { + $attribs = []; + } + + $attribs[$attribute] = $value ? 1 : 0; + $preorder->attributes = json_encode($attribs); + if($preorder->save()) { + return ["id" => $preorder_id, "attribute" => $attribute, "update" => date("d.m.Y H:i", $preorder->edit)]; + } else { + $this->returnJson(["status" => "error", "result" => ["id" => $preorder_id, "attribute" => $attribute]]); + } + + } + + private function updateStatusApi() { + $preorder_id = $this->request->id; + + if(!is_numeric($preorder_id) || $preorder_id < 1) { + return false; + } + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + return false; + } + + $status_id = $this->request->status_id; + if(!is_numeric($status_id) || $status_id < 1) { + return false; + } + + $status = new Preorderstatus($status_id); + if(!$status->id) { + return false; + } + + $preorder->status_id = $status_id; + $preorder->edit_by = $this->me->id; + $preorder->save(); + + $update = []; + + foreach(PreorderModel::searchActive(["adb_hausnummer_id" => $preorder->adb_hausnummer_id]) as $affected_preorder) { + $up = [ + "id" => $affected_preorder->id, + "sid" => $affected_preorder->status_id, + "code" => $affected_preorder->status->code, + "text" => $affected_preorder->status->name, + "bcode" => $affected_preorder->adb_hausnummer->status->code, + "btext" => $affected_preorder->adb_hausnummer->status->name, + "ciftoken" => $affected_preorder->ciftoken, + "cifurl" => $affected_preorder->cifurl, + "cifcableurl" => $affected_preorder->cifcableurl, + ]; + if($preorder->adb_wohneinheit_id) { + $up["ucode"] = $affected_preorder->adb_wohneinheit->status->code; + $up["utext"] = $affected_preorder->adb_wohneinheit->status->name; + } + + $update[] = $up; + } + + return ["message" => "Status saved successfully", "id" => $preorder_id, "updates" => $update]; + } + + private function savePatchpositionApi() { + $preorder_id = $this->request->id; + + $cluster = $this->request->cluster; + $shelf = $this->request->shelf; + $module = $this->request->module; + $port = $this->request->port; + + if(!is_numeric($preorder_id) || $preorder_id < 1) { + return false; + } + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + return false; + } + + if(!$preorder->adb_wohneinheit_id) { + return false; + } + + $we = $preorder->adb_wohneinheit; + if($cluster && $cluster != $we->cluster) { + $we->patch_cluster = $cluster; + } + $we->patch_shelf = $shelf; + $we->patch_module = $module; + $we->patch_port = $port; + $we->save(); + + $preorder->save(); + + return ["message" => "Patchposition saved successfully", "id" => $preorder->id]; + + } + + private function deleteWorkorderApi() { + if(!$this->me->is("Admin")) { + return false; + } + + $preorder_id = $this->request->id; + $wo_id = $this->request->wid; + + if(!is_numeric($preorder_id) || $preorder_id < 1) { + return false; + } + + $preorder = new Preorder($preorder_id); + if(!$preorder->id) { + return false; + } + + if(!$preorder->adb_wohneinheit_id) { + return false; + } + + if(!is_numeric($wo_id) || $wo_id < 1) { + return false; + } + $workorder = new RimoWorkorder($wo_id); + if(!$workorder->id) { + return false; + } + + if($preorder->adb_wohneinheit_id != $workorder->adb_wohneinheit_id) { + $this->log->warning(__METHOD__ . ": wohneinheit_id not equal"); + return false; + } + + $workorder->delete(); + return ["message" => "Workorder deleted successfully", "id" => $preorder->id, "wid" => $wo_id]; + } + } \ No newline at end of file