Ver a proveniência

verfallen neu

master
FlorianEisenmenger há 1 ano
ascendente
cometimento
5f6c48225e
1 ficheiros alterados com 162 adições e 0 eliminações
  1. +162
    -0
      admin/include/tests/Verfallen-NEU.php

+ 162
- 0
admin/include/tests/Verfallen-NEU.php Ver ficheiro

@@ -0,0 +1,162 @@
#!/usr/bin/php56
<?php
require_once('../functions.php');

/**
* Main script to handle point expiration
* Rules:
* 1. Check if there was any credit in the last 24 months
* 2. If no credit in 24 months -> all points expire
* 3. If there was credit -> points older than 4 years expire monthly
*/

// Get current month and year
$currentMonth = date('m', time());
$currentYear = date('Y', time());
$currentTimestamp = time();

// Process all users
$result = dbQuery("SELECT userId FROM users") or die(dbError());
while ($row = dbFetchRow($result)) {
$userId = $row['userId'];
if ($userId <= 0) {
continue;
}

processUserPoints($userId, $currentYear, $currentMonth, $currentTimestamp);
}

/**
* Process points for a single user
*/
function processUserPoints($userId, $currentYear, $currentMonth, $currentTimestamp) {
$konto = new konto($userId);

// Calculate timestamp for 24 months ago
$twoYearsAgo = strtotime("-24 months", $currentTimestamp);

// Check for any credits in last 24 months
$lastCreditDate = getLastPositiveEntry($userId, $currentTimestamp);

if ($lastCreditDate === 0 || $lastCreditDate < $twoYearsAgo) {
// No credits in last 24 months - all points expire
expireAllPoints($konto, $currentTimestamp);
} else {
// Process 4-year expiration
processFourYearExpiration($konto, $currentYear, $currentMonth, $currentTimestamp);
}
}

/**
* Get the date of the last positive entry (credit) for a user
*/
function getLastPositiveEntry($userId, $currentTimestamp) {
$query = "SELECT MAX(datum) as last_credit
FROM kontobewegungen
WHERE userId = $userId
AND wert > 0
AND gueltig = 1
AND geloescht != 1
AND datum <= $currentTimestamp";

$result = dbQuery($query) or die(dbError());
$row = dbFetchRow($result);
return $row['last_credit'] ? intval($row['last_credit']) : 0;
}

/**
* Expire all points for inactive accounts (no credits in 24 months)
*/
function expireAllPoints($konto, $currentTimestamp) {
$currentBalance = $konto->getSaldo();

if ($currentBalance <= 0) {
return;
}

$user = new user(0, $konto->userId);
echo "{$konto->userId}, {$user->versnummer}: Expire all points due to 24 months inactivity. Balance: $currentBalance\n";

// Create expiration entry
$expiration = new kontoBewegung();
$expiration->userId = $konto->userId;
$expiration->kategorie = 0;
$expiration->unterkategorie = 0;
$expiration->praemienid = 0;
$expiration->praemienhmid = 0;
$expiration->kommentar = 'Punkteverfall, da 2 Jahre keine Punkte aufgefrischt wurden';
$expiration->datum = $currentTimestamp;
$expiration->datumerwerb = date('Y-m-d', $currentTimestamp);
$expiration->beschreibung = 'Punkteverfall, da 2 Jahre keine Punkte aufgefrischt wurden';
$expiration->wert = -$currentBalance;
$expiration->gueltig = 0;

$konto->addKontobewegung($expiration);

$updateQuery = "UPDATE kontobewegungen SET gueltig = 0
WHERE wert > 0
AND gueltig = 1
AND geloescht != 1
AND userId = {$konto->userId}";
dbQuery($updateQuery) or die(dbError());
}

/**
* Process 4-year expiration for active accounts
*/
function processFourYearExpiration($konto, $currentYear, $currentMonth, $currentTimestamp) {
// Get timestamp for 4 years ago
$fourYearsAgo = strtotime("-4 years", $currentTimestamp);

// Get all valid points older than 4 years that haven't expired yet
$query = "SELECT SUM(wert) as expiring_points
FROM kontobewegungen
WHERE userId = {$konto->userId}
AND datum < $fourYearsAgo
AND wert > 0
AND gueltig = 1
AND geloescht != 1";

$result = dbQuery($query) or die(dbError());
$row = dbFetchRow($result);
$expiringPoints = intval($row['expiring_points']);

if ($expiringPoints <= 0) {
return;
}

// Make sure we don't expire more points than the current balance
$currentBalance = $konto->getSaldo();
if ($expiringPoints > $currentBalance) {
$expiringPoints = $currentBalance;
}

$user = new user(0, $konto->userId);
echo "{$konto->userId}, {$user->versnummer}: Expire $expiringPoints points older than 4 years. Balance: $currentBalance\n";

// Create expiration entry
$expiration = new kontoBewegung();
$expiration->userId = $konto->userId;
$expiration->kategorie = 0;
$expiration->unterkategorie = 0;
$expiration->praemienid = 0;
$expiration->praemienhmid = 0;
$expiration->kommentar = 'Punkteverfall nach 4 Jahren';
$expiration->datum = $currentTimestamp;
$expiration->datumerwerb = date('Y-m-d', $currentTimestamp);
$expiration->beschreibung = 'Punkteverfall nach 4 Jahren';
$expiration->wert = -$expiringPoints;
$expiration->gueltig = 0;

$konto->addKontobewegung($expiration);

// Mark expired points as invalid
$updateQuery = "UPDATE kontobewegungen
SET gueltig = 0
WHERE userId = {$konto->userId}
AND datum < $fourYearsAgo
AND wert > 0
AND gueltig = 1
AND geloescht != 1";
dbQuery($updateQuery) or die(dbError());
}

Carregando…
Cancelar
Guardar