File: //proc/1122/cwd/common/models/BotCallRow.php
<?php
namespace common\models;
use Yii;
use yii\helpers\Html;
/**
* One call row from Google Sheet (not persisted).
*/
class BotCallRow
{
/** @var int 0-based index in parsed data rows */
public $index = 0;
/** @var string */
public $dateRaw = '';
/** @var string */
public $number = '';
/** @var string */
public $direction = '';
/** @var string */
public $organization = '';
/** @var string */
public $duration = '';
/** @var string */
public $transcript = '';
/** @var string */
public $assessment = '';
/** @var string */
public $summary = '';
/** @var string */
public $name = '';
/** @var string Numeric ID from sheet column I when present */
public $externalId = '';
/** @var int|null bot_contacts.id */
public $contactId;
/** @var int 1-based row number in Google Sheet (for loading transcript on demand) */
public $sourceSheetRow = 0;
public function getFormattedDate(): string
{
$raw = trim($this->dateRaw);
if ($raw === '') {
return '—';
}
$ts = strtotime($raw);
if ($ts !== false) {
return date('d.m.Y H:i', $ts);
}
return $raw;
}
public function getDisplayName(): string
{
$name = trim($this->name);
return $name !== '' ? $name : '—';
}
public function getDisplayNumber(): string
{
$number = trim($this->number);
return $number !== '' ? $number : '—';
}
public function getDisplayAssessment(): string
{
$val = trim($this->assessment);
return $val !== '' ? $val : '—';
}
public function getDisplaySummary(): string
{
$val = trim($this->summary);
if ($val === '') {
return '—';
}
if (mb_strlen($val) > 120) {
return mb_substr($val, 0, 117) . '…';
}
return $val;
}
public function getShortDirection(): string
{
$raw = trim($this->direction);
if ($raw === '') {
return '—';
}
$lower = mb_strtolower($raw);
if (mb_strpos($lower, 'вхід') !== false) {
return Yii::t('common', 'Inbound call');
}
if (mb_strpos($lower, 'вихід') !== false) {
return Yii::t('common', 'Outbound call');
}
if (mb_strlen($raw) > 28) {
return mb_substr($raw, 0, 25) . '…';
}
return $raw;
}
public function getAssessmentBadge(): string
{
$val = trim($this->assessment);
if ($val === '' || !is_numeric($val)) {
return Html::tag('span', '—', ['class' => 'text-muted']);
}
$score = (int) $val;
if ($score <= 4) {
$class = 'badge badge-danger';
} elseif ($score <= 6) {
$class = 'badge badge-warning';
} else {
$class = 'badge badge-success';
}
return Html::tag('span', Html::encode((string) $score), ['class' => $class]);
}
}