Merge branch 'fronkdev' into 'master'

Snopp/Citycom Service Order Api

See merge request fronk/thetool!1643
This commit is contained in:
Frank Schubert
2025-08-18 16:04:48 +00:00
7 changed files with 99 additions and 21 deletions

View File

@@ -56,6 +56,12 @@ class SnoppCitycom extends Modules\ApiControllerModule
return \mfResponse::NotFound(["message" => "Home not found"]);
}
// Home must have Status 300, else return deferred
if($wohneinheit->status->code < 300) {
return \mfResponse::Ok(["message" => "ONT not yet installed. Deferred", "activation_status" => "deferred"]);
}
$cc_home_id = \Citycom_OanApiHelper::hausnummerExtrefToCitycomId($wohneinheit->extref);
$data["up"] = $bb_up;
$data["down"] = $bb_down;
@@ -63,6 +69,14 @@ class SnoppCitycom extends Modules\ApiControllerModule
$data["execution_date"] = ($execution_date) ? $execution_date->format("Y-m-d") : false;
$data["services"] = CITYCOM_OAN_API_SERVICES_FOR_ORDER;
// check if mgmt ctag is set
// so we use the same ctag set for the real services
$mgmt_ctag = \PreorderCtag::getFirstActive(["preorder_id" => $preorder->id, "service_type" => "mgmt"]);
if($mgmt_ctag) {
$data["ctag_range_search"] = $mgmt_ctag->ctag;
}
if($preorder->campaign->name == "Citycom - Graz") {
$data["product_name"] = "Estmk Greenstream OAN $bb_down/$bb_up";
}
@@ -71,13 +85,18 @@ class SnoppCitycom extends Modules\ApiControllerModule
$cc_api_client = new \Citycom_OanApiClient(CITYCOM_OAN_API_USER, CITYCOM_OAN_API_PASS);
$cc_api = new \Citycom_OanApiHelper($cc_api_client);
// order Service at Citycom and set Preorder to 500 Finished
$services = $cc_api->orderServices($preorder, $cc_home_id, $data);
if(!$services) {
return \mfResponse::InternalServerError(["message" => "Error activating service"]);
}
$preorder->setNewStatusCode(500);
$preorder->save();
return \mfResponse::Ok(["message" => "Services ordered successfully", "activation_status" => "active"]);
}
}
}

View File

@@ -50,6 +50,7 @@ class OperationaldataApicontroller extends mfBaseApicontroller
$this->addRoute("/operationaldata/home/:id/connected", [$modules["Snopp"], "setPreorderConnected"], "POST");
$this->addRoute("/operationaldata/home/:id/active", [$modules["Snopp"], "setPreorderActive"], "POST");
//$this->addRoute("/operationaldata/preorder/:id/orderServiceTest", [$modules["SnoppCitycom"], "orderServiceTest"], "POST");
$this->addRoute("/operationaldata/preorder/:id/orderService", [$modules["SnoppCitycom"], "orderService"], "POST");
}

View File

@@ -671,6 +671,43 @@ class Preorder extends mfBaseModel {
}
public function getFreeCtagsInSet($search_ctag) {
if(!$this->getProperty("adb_hausnummer")->vlan_stag) {
echo "no stag\n";
return false;
}
$stag = $this->adb_hausnummer->vlan_stag;
if(!$stag) {
return false;
}
$ctags_per_home = 1;
$network_name = "";
if($this->adb_hausnummer->netzgebiet->source == "citycom-oan-api") {
$network_name = "citycom-oan";
$ctags_per_home = count(CITYCOM_OAN_API_SERVICES_FOR_ORDER) + count(CITYCOM_OAN_API_SERVICES_FOR_RESERVATION); // Service VLANS + mgmt VLANS
}
if(!$network_name) {
echo "no network\n";
return false;
}
// get start of ctag range
$first_ctag = $search_ctag - ($search_ctag % $ctags_per_home);
$ctag_range = [];
for($i = $first_ctag; $i < $first_ctag + $ctags_per_home; $i++) {
if(!PreorderCtag::getFirstActive(["stag" => $stag, "ctag" => $i, "network" => $network_name])) {
$ctag_range[] = $i;
}
}
return $ctag_range;
}
public function getNextFreeCtags() {
if(!$this->getProperty("adb_hausnummer")->vlan_stag) {
echo "no stag\n";
@@ -678,6 +715,10 @@ class Preorder extends mfBaseModel {
}
$stag = $this->adb_hausnummer->vlan_stag;
if(!$stag) {
return false;
}
$new_ctag = false;
$ctags_per_home = 1;
@@ -693,7 +734,7 @@ class Preorder extends mfBaseModel {
return false;
}
$last_ctag = PreorderCtag::getLast(["stag" => $stag, "network" => $network_name]);
$last_ctag = PreorderCtag::getLastActive(["stag" => $stag, "network" => $network_name]);
if(!$last_ctag) {
$new_ctag = $first_ctag;
} else {
@@ -988,6 +1029,7 @@ class Preorder extends mfBaseModel {
if($status->code < $new_status->code) {
$this->status_id = $new_status->id;
}
return true;
}
public function getNetowner() {

View File

@@ -219,6 +219,11 @@ class PreorderCtag extends mfBaseModel {
return null;
}
public static function getLastActive($filter) {
$filter["deleted"] = false;
return self::getLast($filter);
}
public static function getLast($filter) {
$db = FronkDB::singleton();