diff --git a/.directory b/.directory deleted file mode 100755 index 695235d..0000000 --- a/.directory +++ /dev/null @@ -1,3 +0,0 @@ -[Dolphin] -Timestamp=2022,2,19,13,48,38 -Version=4 diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 4afa06c..7e12a1c 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -406,6 +406,30 @@ } } }, + "clientmgmt_client_account": { + "name": "clientmgmt_client_account", + "fields": { + "clientmgmt_client_account_id": { + "name": "clientmgmt_client_account_id", + "type": "INT", + "null": false, + "primary": true, + "autoincrement": true + }, + "clientmgmt_client_account_account": { + "name": "clientmgmt_client_account_account", + "type": "VARCHAR(50)", + "null": false + }, + "clientmgmt_client_account_client": { + "name": "clientmgmt_client_account_client", + "type": "INT(11)", + "null": false, + "foreignTable": "clientmgmt_client", + "foreignKey": "clientmgmt_client_id" + } + } + }, "clientmgmt_client_media": { "name": "clientmgmt_client_media", "fields": { diff --git a/Admin/Installer.php b/Admin/Installer.php index 62cbd66..cb0cfdd 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -146,7 +146,7 @@ final class Installer extends InstallerAbstract $request->setData('title', \reset($attribute['l11n'])); $request->setData('language', \array_keys($attribute['l11n'])[0] ?? 'en'); $request->setData('is_required', $attribute['is_required'] ?? false); - $request->setData('is_custom_allowed', $attribute['is_custom_allowed'] ?? false); + $request->setData('custom', $attribute['is_custom_allowed'] ?? false); $request->setData('validation_pattern', $attribute['validation_pattern'] ?? ''); $request->setData('datatype', (int) $attribute['value_type']); diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 34fe9c7..7040be4 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -88,7 +88,7 @@ final class ApiController extends Controller /** @var \Modules\ClientManagement\Models\Client $client */ $client = $clientMapper->execute(); - return $client instanceof NullClient ? null : $client; + return $client->id === 0 ? null : $client; } /** @@ -129,7 +129,7 @@ final class ApiController extends Controller if (\in_array($client->mainAddress->getCountry(), ISO3166CharEnum::getRegion('eu'))) { $validate = EUVATVies::validateQualified( $request->getDataString('vat_id') ?? '', - $unit->getAttribute('vat_id')?->value->valueStr ?? '', + $unit->getAttribute('vat_id')->value->valueStr ?? '', $client->account->name1, $client->mainAddress->city, $client->mainAddress->postal, @@ -144,7 +144,7 @@ final class ApiController extends Controller StringUtils::intHash(EUVATVies::class), 'vat_validation', self::NAME, - (string) $client->getId(), + (string) $client->id, \json_encode($validate), (int) \ip2long($request->getOrigin()) ); @@ -164,8 +164,8 @@ final class ApiController extends Controller $internalResponse = new HttpResponse(); $internalRequest->header->account = $request->header->account; - $internalRequest->setData('client', $client->getId()); - $internalRequest->setData('type', $type->getId()); + $internalRequest->setData('client', $client->id); + $internalRequest->setData('type', $type->id); $internalRequest->setData('custom', $request->hasData('vat_id')); $this->apiClientAttributeCreate($internalRequest, $internalResponse); @@ -191,9 +191,9 @@ final class ApiController extends Controller $internalResponse = new HttpResponse(); $internalRequest->header->account = $request->header->account; - $internalRequest->setData('client', $client->getId()); - $internalRequest->setData('type', $type->getId()); - $internalRequest->setData('value', $value->getId()); + $internalRequest->setData('client', $client->id); + $internalRequest->setData('type', $type->id); + $internalRequest->setData('value', $value->id); $this->apiClientAttributeCreate($internalRequest, $internalResponse); } @@ -735,7 +735,7 @@ final class ApiController extends Controller $this->createModelRelation( $request->header->account, (int) $request->getData('type'), - $attrValue->getId(), + $attrValue->id, ClientAttributeTypeMapper::class, 'defaults', '', $request->getOrigin() ); } @@ -898,7 +898,7 @@ final class ApiController extends Controller foreach ($uploaded as $file) { $this->createModelRelation( $request->header->account, - $file->getId(), + $file->id, $request->getDataInt('type'), MediaMapper::class, 'types', @@ -911,7 +911,7 @@ final class ApiController extends Controller $this->createModelRelation( $request->header->account, (int) $request->getData('client'), - \reset($uploaded)->getId(), + \reset($uploaded)->id, ClientMapper::class, 'files', '', $request->getOrigin() ); @@ -942,6 +942,6 @@ final class ApiController extends Controller } $model = $responseData['response']; - $this->createModelRelation($request->header->account, $request->getData('id'), $model->getId(), ClientMapper::class, 'notes', '', $request->getOrigin()); + $this->createModelRelation($request->header->account, $request->getData('id'), $model->id, ClientMapper::class, 'notes', '', $request->getOrigin()); } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index a7ae561..3569f32 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -15,6 +15,7 @@ declare(strict_types=1); namespace Modules\ClientManagement\Controller; use Modules\Billing\Models\SalesBillMapper; +use Modules\ClientManagement\Models\ClientAttributeTypeL11nMapper; use Modules\ClientManagement\Models\ClientAttributeTypeMapper; use Modules\ClientManagement\Models\ClientAttributeValueMapper; use Modules\ClientManagement\Models\ClientMapper; @@ -126,7 +127,12 @@ final class BackendController extends Controller ->where('l11n/language', $response->getLanguage()) ->execute(); + $l11ns = ClientAttributeTypeL11nMapper::getAll() + ->where('ref', $attribute->id) + ->execute(); + $view->addData('attribute', $attribute); + $view->addData('l11ns', $l11ns); return $view; } @@ -238,7 +244,7 @@ final class BackendController extends Controller ->on(MediaMapper::TABLE . '.' . MediaMapper::PRIMARYFIELD, '=', MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['self']) ->leftJoin(MediaTypeMapper::TABLE) ->on(MediaMapper::HAS_MANY['types']['table'] . '.' . MediaMapper::HAS_MANY['types']['external'], '=', MediaTypeMapper::TABLE . '.' . MediaTypeMapper::PRIMARYFIELD) - ->where(ClientMapper::HAS_MANY['files']['self'], '=', $client->getId()) + ->where(ClientMapper::HAS_MANY['files']['self'], '=', $client->id) ->where(MediaTypeMapper::TABLE . '.' . MediaTypeMapper::getColumnByMember('name'), '=', 'client_profile_image'); $clientImage = MediaMapper::get() @@ -251,21 +257,21 @@ final class BackendController extends Controller // stats if ($this->app->moduleManager->isActive('Billing')) { - $ytd = SalesBillMapper::getSalesByClientId($client->getId(), new SmartDateTime('Y-01-01'), new SmartDateTime('now')); - $mtd = SalesBillMapper::getSalesByClientId($client->getId(), new SmartDateTime('Y-m-01'), new SmartDateTime('now')); - $lastOrder = SalesBillMapper::getLastOrderDateByClientId($client->getId()); + $ytd = SalesBillMapper::getSalesByClientId($client->id, new SmartDateTime('Y-01-01'), new SmartDateTime('now')); + $mtd = SalesBillMapper::getSalesByClientId($client->id, new SmartDateTime('Y-m-01'), new SmartDateTime('now')); + $lastOrder = SalesBillMapper::getLastOrderDateByClientId($client->id); $newestInvoices = SalesBillMapper::getAll() ->with('type') ->with('type/l11n') ->with('client') - ->where('client', $client->getId()) + ->where('client', $client->id) ->where('type/l11n/language', $response->getLanguage()) ->sort('id', OrderType::DESC) ->limit(5) ->execute(); - $monthlySalesCosts = SalesBillMapper::getClientMonthlySalesCosts($client->getId(), (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); - $items = SalesBillMapper::getClientItem($client->getId(), (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); + $monthlySalesCosts = SalesBillMapper::getClientMonthlySalesCosts($client->id, (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); + $items = SalesBillMapper::getClientItem($client->id, (new SmartDateTime('now'))->createModify(-1), new SmartDateTime('now')); } else { $ytd = new Money(); $mtd = new Money(); diff --git a/Models/Client.php b/Models/Client.php index 0f78aca..79fc835 100755 --- a/Models/Client.php +++ b/Models/Client.php @@ -34,15 +34,15 @@ use Modules\Profile\Models\Profile; */ class Client { - protected int $id = 0; + public int $id = 0; public string $number = ''; public string $numberReverse = ''; - private int $status = ClientStatus::ACTIVE; + public int $status = ClientStatus::ACTIVE; - private int $type = 0; + public int $type = 0; public string $info = ''; diff --git a/Models/ClientL11n.php b/Models/ClientL11n.php index 61c06d2..0e7d0e7 100755 --- a/Models/ClientL11n.php +++ b/Models/ClientL11n.php @@ -32,7 +32,7 @@ class ClientL11n implements \JsonSerializable * @var int * @since 1.0.0 */ - protected int $id = 0; + public int $id = 0; /** * Client ID. diff --git a/Models/ClientL11nType.php b/Models/ClientL11nType.php index c2cf973..4b21d6d 100755 --- a/Models/ClientL11nType.php +++ b/Models/ClientL11nType.php @@ -30,7 +30,7 @@ class ClientL11nType implements \JsonSerializable * @var int * @since 1.0.0 */ - protected int $id = 0; + public int $id = 0; /** * Identifier for the l11n type. diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 99b60d7..86ff07f 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -13,6 +13,7 @@ declare(strict_types=1); return ['ClientManagement' => [ + 'AttributeTypes' => 'Attribute Types', 'Accounting' => 'Accounting', 'Addition' => 'Addition', 'Address' => 'Address', diff --git a/Theme/Backend/attribute-type-list.tpl.php b/Theme/Backend/attribute-type-list.tpl.php new file mode 100644 index 0000000..3b6d057 --- /dev/null +++ b/Theme/Backend/attribute-type-list.tpl.php @@ -0,0 +1,71 @@ +getData('attributes'); + +echo $this->getData('nav')->render(); ?> + +
+
+
+
getHtml('AttributeTypes'); ?>
+
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/sales/client/attribute/type?{?}&id=' . $value->id); + ?> + +
getHtml('ID', '0', '0'); ?> + + + + getHtml('Name'); ?> + + + +
id; ?> + printHtml($value->getL11n()); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/attribute-type.tpl.php b/Theme/Backend/attribute-type.tpl.php new file mode 100755 index 0000000..c84c0bd --- /dev/null +++ b/Theme/Backend/attribute-type.tpl.php @@ -0,0 +1,65 @@ +getData('attribute'); +$l11ns = $this->getData('l11ns'); + +echo $this->getData('nav')->render(); ?> + +
+
+
+
getHtml('Attribute'); ?>
+ +
+
+ + +
+ +
+ + +
+
+
+
+ +
+
+
getHtml('Language', '0', '0'); ?>
+ + + + + $value) : ++$c; ?> + +
+ + getHtml('Language', '0', '0'); ?> + getHtml('Title'); ?> +
+ + getLanguage())); ?> + content; ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
diff --git a/Theme/Backend/client-list.tpl.php b/Theme/Backend/client-list.tpl.php index 886adab..2c8c63a 100755 --- a/Theme/Backend/client-list.tpl.php +++ b/Theme/Backend/client-list.tpl.php @@ -103,12 +103,12 @@ echo $this->getData('nav')->render(); ?> $value) : ++$count; - $url = UriFactory::build('{/base}/sales/client/profile?{?}&id=' . $value->getId()); + $url = UriFactory::build('{/base}/sales/client/profile?{?}&id=' . $value->id); $image = $value->getFileByTypeName('client_profile_image'); ?> <?= $this->getHtml('IMG_alt_client'); ?>id === 0 ? 'Web/Backend/img/logo_grey.png' : UriFactory::build('{/base}/' . $image->getPath()); ?>"> printHtml($value->number); ?> diff --git a/Theme/Backend/client-profile-bills.tpl.php b/Theme/Backend/client-profile-bills.tpl.php index 2101c91..4f3b982 100755 --- a/Theme/Backend/client-profile-bills.tpl.php +++ b/Theme/Backend/client-profile-bills.tpl.php @@ -166,7 +166,7 @@ $bills = $this->getData('newestInvoices') ?? []; /** @var \Modules\Billing\Models\Bill $value */ foreach ($bills as $key => $value) : ++$count; - $url = UriFactory::build('{/base}/sales/bill?{?}&id=' . $value->getId()); + $url = UriFactory::build('{/base}/sales/bill?{?}&id=' . $value->id); ?>