Der Cancellation Manager bietet Ihnen die Möglichkeit ihre WHMCS Produkte mit Vertragslaufzeiten und Kündigungsfristen zu versehen. Dem Kunden werden bei einer Kündigung die nächsten 5 möglichen Kündigungszeitpunkte angezeigt.
Systemvorraussetzungen
Zur Nutzung und Installation des Cancellation Manager Moduls müssen folgende Voraussetzungen erfüllt sein:
- Lauffähige WHMCS Installation Version 8.8 – 8.11
- Admin Zugang zu WHMCS
- FTP Zugang
- installierter Ioncube Loader (mindestens Version 13)
- PHP 7.4, 8.1, 8.2
Installation
- Loggen Sie sich bitte im Kundenbereich von Plambee.de Webhosting ein und laden sich dort die aktuelle Version des Cancellation Manager herunter.
- Entpacken Sie die zip.Datei auf Ihrem Rechner
- laden Sie die Ordner modules und templates via FTP in Ihr WHMCS Verzeichnis.
- Loggen Sie sich nun in Ihrem WHMCS Adminbereich ein
- In der Addonauflistung suchen Sie nun bitte nach dem Modul „Cancellation Manager“ und klicken dort bitte auf „Activate“ und danach auf „Configure“
- In dem Feld „Module license“ tragen Sie bitte ihren Lizenzcode ein, diesen finden Sie im Plambee.de Kundenbereich in den Produktdetails.
- In dem Feld „Admin Reminder Days“ können Sie angeben wie viele Tage vor Durchführung der Kündigung der Admin eine Erinnerung erhalten soll, sofern die Option darunter entsprechend aktiviert ist.
- In dem Feld „Client Reminder Days“ können Sie angeben wie viele Tage vor Durchführung der Kündigung der Kunde eine Erinnerung erhalten soll, sofern die Option darunter entsprechend aktiviert ist.
- Mit der Option „Use Default Terms“ können Sie die weiter unten definierten Standardwerte aktivieren. Diese Standardwerte werden dann für Produkte verwendet für die keine eigene Konfiguration über das Modul erstellt wurde.
- „Default Notice Time“, geben Sie hier bitte die Kündigungsfrist in Tagen ein
- „Default Contract Time“, geben Sie hier bitte die Vertragslaufzeit in Monaten ein
- Deaktivieren Sie unbedingt das WHMCS eigene Kündigungssystem in den Automation Settings
Ist das Modul fertig installiert können Sie nun in das Modul gehen und dort für Ihre Produkte die jeweiligen Fristen hinterlegen. Wenn Sie die Fristen hinterlegt haben müssen dann noch ein paar Templateanpassungen gemacht werden, sofern Sie nicht die mitgelieferten Templatedateien verwenden.
Templateanpassungen
Das Modulpaket enthält bereits für das six Template angepasste Dateien, sollten Sie aber ein eigenes Template verwenden oder sollten die entsprechenden TPL Dateien von Ihnen bereits modifiziert werden müssen Sie Ihre Templatedateien manuell anpassen. In der Beschreibung orientieren wir uns am Six Template von WHMCS, bei anderen Templates können die erforderlichen Anpassungen abweichen, wenn Sie die entsprechenden Anpassungen nicht selbst vornehmen können, wenden Sie sich bitte zwecks Angebot an unseren Support.
clientareaproductdetails.tpl
Ersetzen Sie:
<a href="clientarea.php?action=cancel&id={$id}" class="btn btn-block btn-danger {if $pendingcancellation}disabled{/if}">{if $pendingcancellation}{$LANG.cancellationrequested}{else}{$LANG.clientareacancelrequestbutton}{/if}</a>
durch
<a href="clientarea.php?action=cancel&id={$id}" class="btn btn-block btn-danger">{$LANG.clientareacancelrequestbutton}</a>
ansonsten hat der Kunde keine Möglichkeit mehr auf die Kündigungsseite zu gelangen, um eine Kündigung wieder zurück zu nehmen, wenn die Kündigung hinterlegt ist.
Wenn Sie dem Kunden in den Produktdetails anzeigen möchten, zu wann das Produkt gekündigt wurde, öffnen Sie die clientareaproductdetails.tpl in einem Editor und fügen Sie an geeigntere Stelle folgendes hinzu:
{if $cancellation_manager_canceldate}
<h4><strong>{$canceled_to} {$cancellation_manager_canceldate}</strong></h4>
{/if} Durch die IF Abfrage wird der Hinweis nur angezeigt wenn es für das Produkt auch eine Kündigung gibt.
Wenn Sie auch die Vertragslaufzeit und die Kündigungsfristen anzeigen lassen möchten, können Sie dies z.B. mit folgendem Code machen
{if $cm_notice_time}
<h4>{$cm_notice_time_lang} {$cm_notice_time}</h4>
{/if}
{if $cm_contracttime}
<h4>{$cm_contracttime_lang} {$cm_contracttime}</h4>
{/if}
clientareadomaindetails.tpl
Wenn Sie dem Kunden ermöglichen möchten das er Domains nach Vertragslaufzeiten udn Fristen kündigen kann (das heißt die automatische Verlängerung deaktivieren) muss die clientareadomaindetails.tpl angepasst werden.
Ersetzen Sie hierzu den div Block tabAutorenew
<div class=“tab-pane fade“ id=“tabAutorenew“>
…..
…..
…..
</div>
<div class=“tab-pane fade“ id=“tabNameservers“>
durch
<div class=“tab-pane fade“ id=“tabAutorenew“>
{if $cm_domain_canceled != ‚1‘}
{include file=“$template/includes/alert.tpl“ type=“success“ msg=$cm_domain_text textcenter=true}
<form role=“form“ method=“post“ action=““ id=“form“ class=“form-stacked“>
<fieldset>
<div class=“form-group“>
<label for=“cancellationreason“>{$LANG.clientareacancelreason}</label>
<textarea name=“cancellationreason“ id=“cancellationreason“ class=“form-control fullwidth“ rows=“6″></textarea>
</div>
<div class=“form-group“>
<div class=“form-group“>
<div class=“form-inline text-center“>
<label class=“control-label“ for=“type“>{$cm_lang_cancellation_date}</label>
<select name=“date“ class=“form-control“>
{foreach from=$cm_domain_cancel_dates item=date}
<option value={$date.systemdate}>{$date.clientdate}</option>
{/foreach}
</select>
</div>
</div>
</div>
<div class=“form-group“>
<div class=“form-inline text-center“>
<input class=“btn btn-danger“ type=“submit“ name=“cm_cancel_domain“ value=“{$LANG.clientareacancelrequestbutton}“>
</div>
</div>
</fieldset>
</form>
{else}
{if $cm_can_remove_domain_cancel eq ‚1‘}
{include file=“$template/includes/alert.tpl“ type=“error“ msg=$cm_domain_canceled_text textcenter=true}
<form role=“form“ method=“post“ action=““ id=“form“ class=“form-stacked“>
<div class=“form-group“>
<div class=“form-inline text-center“>
<input class=“btn btn-danger“ type=“submit“ name=“cm_remove_domain_cancel“ value=“{$cm_remove_cancellation}“>
</div>
</div>
</form>
{else}
{include file=“$template/includes/alert.tpl“ type=“error“ msg=$cm_domain_canceled_text2 textcenter=true}
{/if}
{/if}
</div>
<div class=“tab-pane fade“ id=“tabNameservers“>
clientareacancelrequest.tpl
Die Anpassung der clientareacancelrequest.tpl ist erforderlich damit dem Kunden die Kündigungszeitpunkte angezeigt werden und damit die Kündigung beim Modul ankommt. Ohne diese Anpassung landet die Kündigung im WHMCS eigenen Kündigungssystem und das Produkt kann zum falschen Zeitpunkt gekündigt werden wenn das WHMCS eigene Kündigungssystem nicht deaktiviert ist.
Ersetzen Sie
{if $invalid}
{include file=“$template/includes/alert.tpl“ type=“error“ msg=$LANG.clientareacancelinvalid textcenter=true}
<p class=“text-center“>
<a href=“clientarea.php?action=productdetails&id={$id}“ class=“btn btn-primary“>{$LANG.clientareabacklink}</a>
</p>
{elseif $requested}
{include file=“$template/includes/alert.tpl“ type=“success“ msg=$LANG.clientareacancelconfirmation textcenter=true}
durch
{if $cm_mod_error}
<div class=“alert alert-danger“>
{$cm_mod_error}
</div>
{elseif $requested}
{if $cm_remove_cancel == ‚1‘}
{include file=“$template/includes/alert.tpl“ type=“success“ msg=$cm_clientareacancelconfirmation textcenter=true}
<form role=“form“ method=“post“ action=““ id=“form“ class=“form-stacked“>
<div class=“form-group“>
<div class=“form-inline text-center“>
<input class=“btn btn-danger“ type=“submit“ name=“cm_remove_cancel“ value=“Kündigung widerrufen“>
</div>
</div>
</form>
{else}
<div class=“alert alert-danger“>
{$cm_remove_late}
</div>
{/if}
Suchen Sie dann bitte die Zeile
{include file="$template/includes/alert.tpl" type="info" textcenter=true msg="{$LANG.clientareacancelproduct}: <strong>{$groupname} - {$productname}</strong>{if $domain} ({$domain}){/if}"}
und entfernen den darunter liegenden Code und fügen folgenden Code in die Datei ein
{if $cm_cancel_dates != ''}
<form role="form" method="post" action="" id="form" class="form-stacked">
<fieldset>
<div class="form-group">
<label for="cancellationreason">{$LANG.clientareacancelreason}</label>
<textarea name="cancellationreason" id="cancellationreason" class="form-control fullwidth" rows="6"></textarea>
</div>
{if $domainid}
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title">{$LANG.cancelrequestdomain}</h3>
</div>
<div class="panel-body">
<p>{$LANG.cancelrequestdomaindesc|sprintf2:$domainnextduedate:$domainprice:$domainregperiod}</p>
<div class="col-sm-12 text-center">
<label class="checkbox">
<input type="checkbox" name="canceldomain" id="canceldomain" /> {$LANG.cancelrequestdomainconfirm}
</label>
</div>
</div>
</div>
{/if}
<div class=“form-group“>
<div class=“form-group“>
<div class=“form-inline text-center“>
<label class=“control-label“ for=“type“>{$cm_lang_cancellation_date}</label>
<select name=“date“ class=“form-control“>
{foreach from=$cm_cancel_dates item=date}
<option value={$date.systemdate}>{$date.clientdate}</option>
{/foreach}
</select>
</div>
</div>
</div>
<div class=“form-group“>
<div class=“form-inline text-center“>
<input class=“btn btn-danger“ type=“submit“ name=“cm_cancel_product“ value=“{$LANG.clientareacancelrequestbutton}“>
</div>
</div>
</fieldset>
</form>
{else}
<div class=“alert alert-success“>
{$cm_free_product}
</div>
{/if}
{if $cancelation_manager_hasaddon}
<br>
<table class=“table“>
<thead>
<tr>
<th>{$cm_addonname}</th>
<th>{$cm_lang_cancellation_date}</th>
<th></th>
</tr>
</thead>
<tbody>
{foreach from=$cm_addon_dates item=addon}
<form action=““ method=“post“>
<tr>
<td>{$addon.name}</td>
{if $addon.dates neq „“}
<input type=“hidden“ value=“{$addon.id}“ name=“addon_cancel_id“ id=“addon_cancel_id“>
{if !$addon.hascancel}
<td>
<select name=“date“ class=“form-control“>
{foreach from=$addon.dates item=addondate}
<option value={$addondate.systemdate}>{$addondate.clientdate}</option>
{/foreach}
</select>
</td>
<td>
<input class=“btn btn-danger“ type=“submit“ name=“cm_cancel_addon“ value=“{$cm_cancel_addon}“>
</td>
{else}
<td>{$addon.hascancel}</td>
<td><input class=“btn btn-danger“ type=“submit“ name=“cm_remove_addon_cancel“ value=“{$cm_remove_cancellation}“></td>
{/if}
{else}
<td>{$cm_addon_no_entries}</td>
{/if}
</tr>
</form>
{/foreach}
</tbody>
</table>
{/if}
{/if}
Verwendung
Fristen hinterlegen
Fristen im Modul speichern
Um eine Frist für ein Produkt im Modul zu hinterlegen gehen Sie bitte in das Modul und klicken oben auf „Fristen“ und dann auf Frist hinzufügen.
Wählen Sie dann bitte das Produkt aus für welches Sie die Frist hinterlegen möchten. Nun haben Sie folgende Einstellungsmöglichkeiten:
- Verwende Configoption für die Vertragslaufzeit: Aktivieren Sie diese Option wenn Sie die Vertragslaufzeit nicht direkt im Modul hinterlegen möchten sondern dafür eine Config Option verwenden möchten (Details weiter unten).
- Verwende Configoption für die Kündigungsfrist: Aktivieren Sie diese Option wenn Sie die Kündigungsfrist nicht direkt im Modul hinterlegen möchten sondern dafür eine Config Option verwenden möchten (Details weiter unten).
- Abrechnungsinterval = Vertragslaufzeit: Mit dieser Option entspricht die Mindestvertragslaufzeit dem Abrechnungsinterval. Hat der Kunde z.B. eine Halbjährliche Abrechnung dann beträgt die Laufzeit 6 Monate.
- Vertragslaufzeit in Monaten: Wenn Sie die Laufzeit nicht über eine ConfigOption regeln möchten tragen Sie hier bitte die Anzahl der Monate für die Vertragslaufzeit ein. Also z.B. 6
- Config Option für die Vertragslaufzeit: Wenn Sie oben das Kästchen für die ConfigOptions ausgewählt haben können Sie hier die entsprechende Config Option auswählen. Sofern Sie noch keine entsprechende ConfigOption erstellt haben legen Sie diese bitte an.
- Kündigungsfrist in Tagen: Wenn Sie die Frist nicht über eine ConfigOption regeln möchten tragen Sie hier bitte die Anzahl der Tage für die Vertragslaufzeit ein. Also z.B. 14
- Config Option für die Kündigungsfrist: Wenn Sie oben das Kästchen für die ConfigOptions ausgewählt haben können Sie hier die entsprechende Config Option auswählen. Sofern Sie noch keine entsprechende ConfigOption erstellt haben legen Sie diese bitte an.
- erst Sperren: Aktivieren Sie dieses Kästchen wenn Sie die Produkte zum Kündigungszeitpunkt sperren und nicht Kündigen möchten
- endgültig kündigen nach X Tagen: Geben Sie hier bitte an wie viele Tage nach der Sperrung das Produkt gekündigt werden soll
- Kündigung Widerrufen bis X Tage vor Kündigung: Hier können Sie die Anzahl der Tage (z.B. 4) eintragen ab wann der Kunde eine hinterlegte Kündigung nicht mehr über den Kundenbereich widerrufen kann. Die Eingabe von z.B. 4 bedeutet das die Kündigung 4 Tage vor Durchführung nicht mehr widerrufen werden kann.
Wenn Sie alles eingestellt haben klicken Sie bitte auf Speichern
Fristen aktualisieren
Wenn Sie eine bereits vorhandene Frist ändern möchten dann erstellen Sie diese einfach neu, als wenn es für das Produkt noch keine Frist geben würde. Die vorhandene Frist wird beim Speichern dann aktualisiert
ConfigOptions
Wenn Sie die Frist und/oder Laufzeit mittels ConfigOption realisieren möchten gehen Sie bitte wie folgt vor:
- Erstellen Sie eine neue ConfigOption in einer neuen oder bestehenden Gruppe
- Für die Kündigungsfrist muss die Option wie folgt aussehen: ANZAHL_DER_TAGE|Ihr Text. Also z.B. 14|14 Tage Kündigungsfrist
- Für die Vertragslaufzeit muss die Option wie folgt aussehen: ANZAHL_DER_Monate|Ihr Text. Also z.B. 1|1 Monat Mindestvertragslaufzeit
- Weisen Sie die ConfigOptions dem Produkt zu
Trial Fristen
Mit Version 2.0.0 ist es möglich für Produkte eine feste Laufzeit zu hinterlegen, z.B. um Testzugänge zu realisieren. Hierfür können Sie bei der Speicherung einer Frist das entsprechende Feld auswählen. Bei der Erinnerungsmöglichkeit können Sie Auswählen ob der Kunde x Tage vor Auslaufen seines Produktes eine Erinnerungsmail erhalten soll. In das entsprechende Feld können mehrere Tage Komma separiert eingetragen werden z.B. 0,2,4,6 – wobei die 0, wenn keine Sperrfunktion verwendet wird, für eine Kündigungsmitteilung steht.
E-Mail Vorlagen
E-Mails die an den Kunden und den Admin gesendet werden, können über das Vorlagensystem von WHMCS angepasst werden. Die Vorlagen werden teilweise vom Modul bei der Installation angelegt oder sind bereits bei WHMCS selbst enthalten, zur Verfügung stehen hier je nach Vorlage unterschiedliche Variablen.
Cancellation Request Confirmation
Bei der WHMCS eigenen Kündigungsbestätigung steht mit dem Modul zusätzliche Variablen zur Verfügung:
- {$cancellation_date} = Anzeige des Kündigungsdatums
- {$service_domain} = Domainname
- {$report_date} = Datum mit Uhrzeit wann die Kündigung eingegangen ist
Cancellation of termination
Diese E-Mail Vorlage wird an den Kunden geschickt wenn die Kündigung für sein Produkt widerrufen wurde. Hier stehen folgende Variablen zur Verfügung
- {$cancel_date} = Das Datum an welchen das Produkt gekündigt wurde
- {$product} = Das Produkt für das die Kündigung widerrufen wurde
- {$report_date} = Datum der Kündigung
- {$addon_product} = Name des Hauptprodukts bei einem Addon
- {$addon} = Addon
- {$domain} = Domain
Cancellation Reminder
Diese E-Mail wird für die Erinnerung des Kundens an die Kündigung verwendet. Hier stehen folgende Variablen zur Verfügung
- {$days} = Anzahl der Tage wann die Produkte gekündigt werden
- {$canceled_product} = Array welcher die entsprechenden Produkte mit Service ID und Kündigungsdatum enthält
- {$canceled_domain} = Array mit gekündigten Domains
New Cancellation Request
Diese E-Mail wird an den Admin des Systemes versendet wenn eine Kündigung hinterlegt wird. Hierbei handelt es sich um eine Vorlage die von WHMCS kommt. Neben den WHMCS eigenen Variablen steht hier noch die Variable {$domain_cancelled} zur Verfügung. Diese Variable kann 2 Werte beinhalten, 0 und eins. Hierdurch können Sie z.B eine If Abfrage hinterlegen.
{if $domain_cancelled == '1'}Die Domain {$domain_name} wurde durch den Kunden gekündigt{/if}
Trial Reminder
- {$product} = Produkt
- {$days} = verfügbare Laufzeit in Tagen
- {$suspend} = Bool ob das Produkt bereits gesperrt wurde
- {$suspend_days} = Anzahl der Tage die das Produkt im Gesperrten Zustand bleibt bis es gelöscht wird
Template Variablen
Für die Seite der Produktdetails stehen Ihnen zur Darstellung der Laufzeit und Frist zusätzlich die Variablen zur Verfügung:
- {$cm_notice_time} = Kündigungsfrist
- {$cm_contracttime} = Vertragslaufzeit
ProRata Besonderheiten
Um auch bei Produkten mittels ProRata Abrechnung Fristen und Vertragslaufzeiten zu realisieren gibt es hier eine kleine Besonderheit im Modul. Bei der ProRata Abrechnung wird das Produkt immer an einem bestimmten Tag im Monat abgerechnet (häufig der 1. des Monats), egal wann der Kunde dieses ursprünglich bestellt hat. Hierbei erhält der Kunde bei der Bestellung nur eine anteilige Rechnung z.B. 11-30. und am dem 1. des folgen Monats wird er immer vom ersten bis zum letzten abgrechnet. Nun hat man aber das Problem das die Vertragslaufzeit von zum Beispiel 1 Monat, dem Kunden die Möglichkeit gibt zum 11. eines Monats zu kündigen, da WHMCS aber vom 1. bis zum letzten des Monats abgerechnet hat müsste man dem Kunden eine Gutschrift für die restlichen Tage geben. Ein Umstand der wieder Personalaufwand und Kosten verursacht. Um dies zu erleichtern sorgt das Modul dafür das die letzte Rechnung des Kundens nur anteilig berechnet wird also z.B. vom 1.-10. So ist es auch bei ProRata möglich Vertragslaufzeiten korrekt zu nutzen ohne zusätzlichen Aufwand durch Erstattungen befürchten zu müssen. Sollte der Kunde seine Kündigung nun zurücknehmen, erstellt das Modul 1 Tag nachdem die Kündigung hätte durchgeführt werden sollen eine erneute Rechnung für die restliche Zeit des Monats, also z.B. 10.-30. damit WHMCS ab dem nächsten Monat wieder die gewohnte Abrechnung zum 1. durchführen kann.
Neu ab Version 2.2.0
Mit Version 2.2.0 wurde bei den Friste die Einstellung „Kündigung bei Pro Rata zum Abrechnungsende“ hinzugefügt. Wenn diese Option aktiviert ist, dann kann der Kunde, gemäß der Mindestvertragslaufzeit, zum Ende der Abrechnungszeit kündigen. Es erfolgt in diesem Falle keine Anteilige Abrechnung vom Modul wie oben beschrieben.
Beachten Sie hierzu aber bitte das es hierbei zu Verschiebungen bei der „Mindestvertragslaufzeit kommen kann. Beispiel: Sie haben Ihr Produkt so eingestellt das bei einer Bestellung ab dem 15. direkt der nächste Monat mit berechnet wird, sodass der Kunde im Falle einer Neubestellung direkt 1 1/2 Monate zahlen muss. Der Kunde bestellt am 15.03. Ihr Produkt und am 20. kündigt er dieses wieder, gemäß Vertragslaufzeit könnte der Kunde eigentlich zum 15.4. kündigen, wenn diese Option aktiv ist kann der Kunde aber erst zum 01.5. Kündigen (bei der Bestellung hat er ja bereits bis zum 30.04. bezahlt).
Hinweis zu PayPal Subscriptions
Sollte Ihr Kunde irgendwelche Abo Zahlungen haben, dann achten Sie bitte drauf diese zu kündigen. WHMCS kündigt zwar z:b. PayPal Abozahlungen bei der Kündigung des Produktes selber, aber es besteht keine Möglichkeit die Abozahlung zu verändern damit PayPal bei der letzten Rechnung nur einen anteiligen Betrag abbucht. Somit würden Sie dem Kunden zwar eine anteilige Rechnung schicken, erhalten von PayPal aber eine vollständig abgerechnete Zahlung.
Neu ab Version 2.2.0
In Version 2.2.0 wurde die Option integriert das bei Kündigungen eine hinterlegte Abozahlung gekündigt wird. Beachten Sie bitte das der genutzte Gateway dies auch unterstützen muss.
Kündigungen der Abozahlungen erfolgen 3 Wochen vor dem Kündigungszeitpunkt, damit auch die letzte Abozahlung noch erfolgreich durchgeführt werden kann.
Hinweise
Addons
Wenn das Hauptprodukt gekündigt wird, werden von WHMCS alle Addons zu diesem Produkt ebenfalls gekündigt. Addons können nicht alleine bestehen.
Domains
Aufgrund der unterschiedlichen Abrechnungsmöglichkeiten bei Domains, wird bei einer bestehenden Domainkündigung die Domain in WHMCS erst 10 Monate vor dem Kündigungsdatum mit dem „Do-Not-Renew“ Flag versehen. Dies hat den Grund das es Nutzer gibt die Domains über mehrere Jahre abrechnen, selbst aber jährlich von Ihrem Registrar abgerechnet werden. Würde das Modul das „Do-Not_Renew“ Flag eher setzen, könnte es passieren das die Domain zu früh beim Registrar ausläuft obwohl das Laufzeitende in WHMCS noch nicht erreicht wurde.
Wenn eine Domain in WHMCS gekündigt wird (unter Berücksichtigung der oben beschriebenen Besonderheit), aktualisiert das Modul den Status der Domain über die WHMCS API. Ob Ihr Registrarmodul den „Do-Not-Renew“ Status über den Domainsync synchronisiert, hängt von Ihrem Modul ab. Erfolgt keine Synchronisierung durch Ihr Modul müssen Sie die Domain bei Ihrem Registrar selbstständig kündigen.