Просмотр исходного кода

bugfix "members" as result of new api platform responses, login, users

master
Daniel 1 год назад
Родитель
Сommit
f2609a7bee
28 измененных файлов: 243 добавлений и 746 удалений
  1. +4
    -53
      angular/src/app/_components/layout/two-column/two-column.component.html
  2. +3
    -3
      angular/src/app/_components/list/list.component.ts
  3. +25
    -15
      angular/src/app/_views/user/user-detail/user-detail.component.html
  4. +4
    -4
      angular/src/app/_views/user/user-list/user-list.component.ts
  5. +1
    -1
      angular/src/app/app.component.html
  6. +0
    -167
      angular/src/assets/i18n/de.json
  7. +13
    -483
      angular/src/assets/i18n/en.json
  8. Двоичные данные
      angular/src/assets/images/specific/futcoinbase.jpg
  9. Двоичные данные
      angular/src/assets/images/specific/imaq_logo.jpg
  10. +2
    -2
      angular/src/environments/environment.beta.ts
  11. +2
    -2
      angular/src/environments/environment.development.ts
  12. +1
    -1
      angular/src/index.html
  13. +96
    -0
      docs/shipping-class-diagram.mermaid
  14. +1
    -1
      httpdocs/config/bundles.php
  15. +1
    -0
      httpdocs/config/packages/lexik_jwt_authentication.yaml
  16. Двоичные данные
      httpdocs/public/media/4798991-schtroumpf-paresseux-66fc1a00f3115842764429.jpg
  17. Двоичные данные
      httpdocs/public/media/4798991-schtroumpf-paresseux-66fc1a0102b29531652590.jpg
  18. Двоичные данные
      httpdocs/public/media/gizmo-smurf-vic-george-6731e1217005e794606442.webp
  19. Двоичные данные
      httpdocs/public/media/handy-comic-book-66fc1a010066a282904886.webp
  20. Двоичные данные
      httpdocs/public/media/images-6731e120f2ebd169493980.png
  21. Двоичные данные
      httpdocs/public/media/slouchy-smurfling-tv-characters-photo-u1-6731e120f2815244594178.jpg
  22. Двоичные данные
      httpdocs/public/media/tailor-smurf-tv-characters-photo-u1-6731e12083dee620188146.jpg
  23. Двоичные данные
      httpdocs/public/media/the-king-tv-characters-photo-u1-66fc1a00f06f7970745377.jpg
  24. +1
    -1
      httpdocs/src/Controller/SecurityController.php
  25. +55
    -3
      httpdocs/src/DataFixtures/AppFixtures.php
  26. +1
    -1
      httpdocs/src/EventListener/AuthenticationSuccessListener.php
  27. +19
    -9
      httpdocs/src/Factory/UserFactory.php
  28. +14
    -0
      httpdocs/symfony.lock

+ 4
- 53
angular/src/app/_components/layout/two-column/two-column.component.html Просмотреть файл

@@ -10,68 +10,19 @@
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/system" routerLinkActive="active">
<div class="card-body position-relative" data-cat="system">
<h3 class="position-absolute m-0">{{'system.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/logs" routerLinkActive="active">
<div class="card-body position-relative" data-cat="logs">
<h3 class="position-absolute m-0">{{'logs.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/game-accounts" routerLinkActive="active">
<div class="card-body position-relative" data-cat="account">
<h3 class="position-absolute m-0">{{'game_account.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/candidates" routerLinkActive="active">
<div class="card-body position-relative" data-cat="candidates">
<h3 class="position-absolute m-0">{{'candidate.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/tradepile-items" routerLinkActive="active">
<div class="card-body position-relative" data-cat="tradepile-items">
<h3 class="position-absolute m-0">{{'tradepile_item.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/sales" routerLinkActive="active">
<div class="card-body position-relative" data-cat="sales">
<h3 class="position-absolute m-0">{{'sales.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/sniping" routerLinkActive="active">
<div class="card-body position-relative" data-cat="sniping">
<h3 class="position-absolute m-0">{{'sniping.view' | translate}}</h3>
<a class="card" routerLink="/users" routerLinkActive="active">
<div class="card-body position-relative" data-cat="user">
<h3 class="position-absolute m-0">{{'basic.users' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/profiles" routerLinkActive="active">
<a class="card" routerLink="/profile" routerLinkActive="active">
<div class="card-body position-relative" data-cat="profile">
<h3 class="position-absolute m-0">{{'profile.view' | translate}}</h3>
</div>
</a>
</li>
<li class="nav-item mb-3">
<a class="card" routerLink="/users" routerLinkActive="active">
<div class="card-body position-relative" data-cat="user">
<h3 class="position-absolute m-0">{{'basic.users' | translate}}</h3>
</div>
</a>
</li>
</ul>
</div>
<div class="pb-5 spt-main">


+ 3
- 3
angular/src/app/_components/list/list.component.ts Просмотреть файл

@@ -211,8 +211,8 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy {
this.pagingComponent.getSearchValue()
).subscribe(
data => {
this.dataSource = new MatTableDataSource<any>(data['hydra:member']);
this.pagingComponent.setDataLength(data["hydra:totalItems"]);
this.dataSource = new MatTableDataSource<any>(data['member']);
this.pagingComponent.setDataLength(data["totalItems"]);
}
)
}
@@ -334,7 +334,7 @@ export class ListComponent implements OnInit, AfterViewInit, OnDestroy {
public static getDefaultColPosition(): ListColDefinition {
return {
name: 'pos',
text: 'overview.number',
text: 'basic.number',
type: ListComponent.COLUMN_TYPE_POSITION
} as ListColDefinition;
}


+ 25
- 15
angular/src/app/_views/user/user-detail/user-detail.component.html Просмотреть файл

@@ -1,18 +1,28 @@
<div *ngIf="user" class="spt-container">
<div class="card contacts-detail">
<div class="card-body row">
<div class="spt-col col-12 col-sm-6 col-lg-8">
<h1>{{ user.firstName }} {{ user.lastName }}</h1>
<dl class="spt-dl">
<dt>{{ ('user.email' | translate) }}</dt>
<dd><a href="mailto:{{ user.email }}">{{ user.email }}</a></dd>
</dl>
</div>
<div class="col-12 col-sm-6 col-lg-4 has-image">
<!-- <img *ngIf="user.imageUrl !== null && user.imageUrl !== undefined"-->
<!-- src="{{user.imageUrl}}" width="247" height="94"-->
<!-- alt="{{user.firstName}} {{user.lastName}}" title="{{user.firstName}} {{user.lastName}}"/>-->
</div>
</div>
<div class="d-flex justify-content-between align-items-start">
<h1>{{ 'users.user' | translate }}: {{ user.firstName }} {{ user.lastName }}</h1>
</div>
<mat-tab-group>
<mat-tab label="{{ 'basic.details' | translate }}">
<div class="card contacts-detail">
<div class="card-body row">
<div class="spt-col col-12 col-sm-6 col-lg-8">
<h2>{{ user.firstName }} {{ user.lastName }}</h2>
<dl class="spt-dl">
<dt>{{ ('users.email' | translate) }}</dt>
<dd><a href="mailto:{{ user.email }}">{{ user.email }}</a></dd>
</dl>
</div>
<div class="col-12 col-sm-6 col-lg-4 has-image">
<!-- <img *ngIf="user.imageUrl !== null && user.imageUrl !== undefined"-->
<!-- src="{{user.imageUrl}}" width="247" height="94"-->
<!-- alt="{{user.firstName}} {{user.lastName}}" title="{{user.firstName}} {{user.lastName}}"/>-->
</div>
</div>
</div>
</mat-tab>
<mat-tab label="{{ 'users.userTrips' | translate }}">
# List of all user trips of this user
</mat-tab>
</mat-tab-group>
</div>

+ 4
- 4
angular/src/app/_views/user/user-list/user-list.component.ts Просмотреть файл

@@ -32,27 +32,27 @@ export class UserListComponent implements OnInit, AfterViewInit {
this.listColDefinitions = [
{
name: 'image',
text: 'overview.image',
text: 'basic.image',
type: ListComponent.COLUMN_TYPE_IMAGE,
field: 'imageUrl',
} as ListColDefinition,
{
name: 'firstName',
text: 'overview.firstName',
text: 'users.firstname',
type: ListComponent.COLUMN_TYPE_TEXT,
field: 'firstName',
sortable: true,
} as ListColDefinition,
{
name: 'lastName',
text: 'overview.lastName',
text: 'users.lastname',
type: ListComponent.COLUMN_TYPE_TEXT,
field: 'lastName',
sortable: true,
} as ListColDefinition,
{
name: 'email',
text: 'overview.email',
text: 'users.email',
type: ListComponent.COLUMN_TYPE_EMAIL,
field: 'email',
} as ListColDefinition,


+ 1
- 1
angular/src/app/app.component.html Просмотреть файл

@@ -4,7 +4,7 @@
<div class="navbar-nav">
<a class="nav-item nav-link logo" routerLink="/" routerLinkActive="active"
[routerLinkActiveOptions]="{exact: true}">
<img src="./assets/images/specific/futcoinbase.jpg" width="210" height="80"
<img src="./assets/images/specific/imaq_logo.jpg" width="210" height="80"
alt="{{'basic.company_name' | translate}}"/>
</a>
</div>


+ 0
- 167
angular/src/assets/i18n/de.json Просмотреть файл

@@ -1,167 +0,0 @@
{
"game_account":
{
"profile": "Name",
"credits": "Credits",
"futwiz_value": "Futbin",
"cnt_items": "# Items",
"cnt_sold_items": "# Verkaufte Items",
"active": "aktiv",
"running": "läuft",
"blocked": "blockiert"
},
"system":
{
"delete_image": "Bild löschen",
"confirm_delete_image": "Möchten Sie das Bild wirklich löschen?",
"delete_file": "Datei löschen",
"confirm_delete_file": "Möchten Sie die Datei wirklich löschen?",
"profit_larger_turnover": "Der Gewinn ist größer als der Umsatz!",
"confirm_unassign": "Möchten Sie die Zuweisung wirklich aufheben?"
},
"basic":
{
"logout": "Logout",
"company_name": "MATSEN CHEMIE AG",
"customer": "Kunden",
"supplier": "Dienstleister",
"service": "Lieferanten",
"customerOne": "Kunde",
"supplierOne": "Dienstleister",
"serviceOne": "Lieferant",
"products": "Produkte",
"documents": "Dokumente",
"sales": "Verkäufe",
"profile": "Profil",
"tasks": "Aufgaben",
"contacts": "Kontakte",
"posts": "Notizen",
"comments": "Kommentare",
"users": "Benutzer",
"new": "Neuer",
"assign_partner_01": "Dieses Produkt einem",
"assign_partner_02": "zuordnen",
"new_product": "Neues Produkt",
"assign_product_01": "Diesen Partner einem",
"assign_product_02": "Produkt zuordnen",
"new_document": "Neues Dokument",
"new_task": "Neue Aufgabe",
"new_contact": "Neuer Kontakt",
"new_post": "Neue Notiz",
"new_comment": "Neuer Kommentar",
"new_task_note": "Neue Anmerkung",
"new_sale": "Neuer Verkauf",
"edit_before": "",
"edit_after": "bearbeiten",
"edit_product": "Produkt bearbeiten",
"edit_document": "Dokument bearbeiten",
"edit_task": "Aufgabe bearbeiten",
"edit_contact": "Kontakt bearbeiten",
"edit_post": "Notiz bearbeiten",
"edit_comment": "Kommentar bearbeiten",
"edit_task_note": "Anmerkung bearbeiten",
"edit_sale": "Verkauf bearbeiten",
"details": "Details",
"comment_it": "Kommentieren",
"show_comments": "Kommentare anzeigen",
"hide_comments": "Kommentare ausblenden",
"back": "Zurück",
"yes": "Ja",
"no": "Nein",
"dashboard": "Dashboard",
"account": "Account",
"game_account": "Accounts"
},
"user":
{
"hello": "Hi",
"my": "Meine ",
"email": "Email",
"goals": "Ziele"
},
"overview":
{
"sort": "Sortierung",
"number": "Nr.",
"logo": "Logo",
"address": "Adresse",
"website": "Website",
"image": "Bild",
"productname": "Produkt",
"storage": "Lagerbestand",
"number_long": "Nummer",
"document": "Dokument",
"type": "Typ",
"uploaded": "Hochgeladen am",
"description": "Beschreibung",
"createdBy": "Erstellt von",
"download": "Download",
"partner": "Partner",
"product": "Produkt",
"sale_user": "Verkäufer",
"sale_partner": "Kunde",
"details": "Details",
"turnover": "Umsatz",
"profit": "Gewinn",
"comment": "Kommentar",
"createdAt": "erstellt am",
"firstName": "Vorname",
"lastName": "Nachname",
"email": "Email",
"unassign": "Zuweisung aufheben",
"compact_view": "Kompaktansicht",
"show_done": "Fertige Aufgaben anzeigen"
},
"form":
{
"mandatory": "ist erforderlich",
"email_validation": "Geben Sie eine gültige E-Mail-Adresse ein",
"name": "Name",
"street": "Straße",
"street_no": "Hausnummer",
"zip": "PLZ",
"city": "Stadt",
"country": "Land",
"website": "Website",
"upload_image": "Bild hochladen",
"upload_file": "Datei hochladen",
"firstname": "Vorname",
"lastname": "Nachname",
"birthday": "Geburtstag",
"position": "Position",
"email": "E-Mail",
"phone": "Telefon",
"description": "Beschreibung",
"headline": "Überschrift",
"message": "Nachricht",
"comment": "Kommentar",
"assign_to": "Zuweisen an",
"due_date": "Fälligkeitsdatum",
"prio": "Priorität",
"prio_low": "niedrig",
"prio_medium": "mittel",
"prio_high": "hoch",
"partner": "Partner",
"product": "Produkt",
"turnover": "Umsatz",
"profit": "Gewinn",
"quantity": "Anzahl",
"send": "Speichern",
"search_placeholder": "Suche",
"no_data": "Keine Datensätze gefunden.",
"contact_type": "Kontaktart",
"user": "Benutzer",
"contact": "Kontakt"
},
"sales":
{
"turnover": "Umsatz",
"profit": "Gewinn"
},
"task_note":
{
"type_personal": "Persönlich",
"type_phone": "Telefon",
"type_email": "E-Mail"
}
}

+ 13
- 483
angular/src/assets/i18n/en.json Просмотреть файл

@@ -2,389 +2,16 @@
"dashboard":
{
"view": "Dashboard",
"overview": "Overview",
"error_log": "Error Log",
"hourly_revenue": "Hourly Revenue",
"daily_revenue": "Daily Revenue",
"num_accounts": "# Accounts",
"num_accounts_active": "# Active accounts",
"num_accounts_tm_open": "# TM open accounts",
"num_accounts_tm_closed": "# TM closed accounts",
"num_accounts_dead": "# Dead accounts",
"num_accounts_blocked": "# Blocked accounts",
"num_accounts_running": "# Running accounts",
"num_tradepile_items": "# Tradepile Items",
"num_tradepile_items_active": "# Active tradepile Items",
"num_tradepile_items_sold": "# Sold tradepile Items",
"num_tradepile_items_expired": "# Expired tradepile Items",
"num_tradepile_items_inactive": "# Inactive tradepile Items",
"num_items_unassigned": "# Unassigned items",
"num_candidates": "# Candidates",
"num_candidates_relevant": "# Relevant candidates",
"num_candidates_buy": "# Buy candidates",
"system_active": "System active",
"system_running": "System running",
"system_check_num_sales": "Check number of sales per account",
"system_num_sales_rebuy": "# Sales when account stops for today",
"system_process_count": "System process count all time",
"system_sleep_hour_start": "System starts sleeping at hour",
"system_sleep_hour_end": "System ends sleeping at hour",
"system_wait_hours_before_rebuy": "System waiting minimal hours before rebuy on account",
"system_num_sales_before_rebuy": "System min sold before rebuy on account",
"tp_value": "Total tp value",
"accounts": "Accounts",
"tpItemsCredits": "Tradepile Items & Credits",
"revenuesSales": "Revenues & Sales",
"revenues": "Revenues",
"sales": "Sales",
"systemInfo": "System Info",
"numberOfLines": "Number of lines",
"fetchLogs": "Fetch Logs",
"enterNumberOfLines": "Enter number of lines",
"googleIncomeList": "Google income list",
"total_sniping_revenue": "Sniping Revenue"
},
"profit":
{
"totalFutwiz": "Credits + TP Futwiz",
"totalEaAverage": "Credits + TP EA Average",
"credits": "Credits",
"revenue": "Revenue Total",
"tpValueFutwiz": "TP Futwiz",
"tpValueEaAverage": "TP EA Average",
"revToday": "Rev Today",
"rev3hours": "Rev 3h",
"rev6hours": "Rev 6h",
"rev12hours": "Rev 12h",
"rev24hours": "Rev 24h",
"rev3days": "Rev 3d",
"rev1week": "Rev 1w",
"rev2weeks": "Rev 2w",
"rev3weeks": "Rev 3w",
"rev4weeks": "Rev 4w",
"rev2months": "Rev 2m",
"rev3months": "Rev 3m",
"revTotal": "Rev Total",
"numSalesToday": "Sales Today",
"numSales3hours": "Sales 3h",
"numSales6hours": "Sales 6h",
"numSales12hours": "Sales 12h",
"numSales24hours": "Sales 24h",
"numSales3days": "Sales 3d",
"numSales1week": "Sales 1w",
"numSales2weeks": "Sales 2w",
"numSales3weeks": "Sales 3w",
"numSales4weeks": "Sales 4w",
"numSales2months": "Sales 2m",
"numSales3months": "Sales 3m",
"numSalesTotal": "Sales Total",
"isDailyProfit": "Daily Profit",
"creationDate": "Creation Date"
},
"game_account":
{
"view": "Accounts",
"view_detail": "Account",
"profile": "Profile",
"email": "Email",
"credits": "Credits",
"futwiz_value": "Futwiz",
"cnt_items": "# Items",
"cnt_sold_items": "# Sold items",
"cnt_inactive_items": "# Inactive items",
"active": "Active",
"running": "Running",
"blocked": "Blocked",
"sniping": "Sniping",
"tm_off": "TM off",
"relist_date": "Relist date",
"creation_date": "Creation date",
"relist": "Relist",
"lockedMsg": "Locked Message",
"dynPrices": "Dynamic Prices",
"newBuy": "New Buy",
"newBuySelective": "New Buy Sel.",
"reBuy": "Re Buy",
"importWatchlist": "Import Watchlist",
"autoReBuy": "Auto Re Buy",
"directReBuy": "Direct Re Buy",
"tmOpen": "TM Open",
"dead": "Dead",
"itemMaxBuyPrice": "Item Max Buy Price",
"emailPw": "Email Password",
"eaCode1": "EA Code 1",
"eaCode2": "EA Code 2",
"eaCode3": "EA Code 3",
"eaCode4": "EA Code 4",
"eaCode5": "EA Code 5",
"eaCode6": "EA Code 6",
"revenue": "Revenue",
"futWizValue": "FutBin Value",
"cntItems": "CNT Items",
"cntSoldItems": "CNT Sold Items",
"mfaCode": "MFA Code",
"twoFactorAuthKey": "2FA Auth Key",
"loginVia2faApp": "2FA Auth via app (email is default)",
"creationDate": "Creation Date",
"newBuyDate": "New Buy Date",
"rebuyDate": "Rebuy Date",
"relistDate": "Relist Date",
"snipingDate": "Sniping Date",
"loopStartDate": "Loop start date",
"loopFinishDate": "Loop finish date",
"account": "Account",
"ea_mail": "EA & Mail",
"tradepile_items": "Tradepile items",
"club_items": "Club items",
"sales": "Sales",
"stats": "Stats",
"connect_account": "Connect Account",
"connect_account_confirm": "Do you want to this account to ea now?",
"delete_cache_file": "Delete cachefile",
"delete_cache_file_confirm": "Do you want to delete the cache file of this account?",
"paste_backup_codes": "Paste backup codes here",
"replace_backup_codes": "Replace backup codes",
"contracts": "Contracts"
},
"candidate":
{
"view": "Candidates",
"firstname": "Firstname",
"lastname": "Lastname",
"nickname": "Nickname",
"rating": "Rating",
"rareFlag": "RareFlag",
"rarityName": "Version",
"eaId": "EA Id",
"eaResourceId": "EA resource ID",
"eaTradeId": "EA Trade ID",
"buy": "Buy",
"relevant": "Relevant",
"prio": "Prio",
"sellBid": "Sell Bid",
"sellStartingBid": "Sell Starting Bid",
"startingBid": "Bid Price",
"lastSalePrice": "Last Sale Price",
"binPrice": "Bin Price",
"sellBin": "Sell Bin",
"listCnt": "# Listed",
"soldCnt": "# Sold",
"stock": "# Stock",
"revenue": "Revenue",
"snipingRevenue": "Sniping Revenue",
"creation_date": "Creation date",
"futwiz_import": "Futwiz / Futbin Import",
"futwiz_import_info": "Please provide data for futwiz & futbin import",
"futwiz": "Futwiz",
"futbin": "Futbin",
"futwiz_import_candidate_link": "Candidate link",
"futwiz_import_update_candidate": "Update candidate if exists",
"futwiz_import_candidate_html": "Futwiz candidate html (full website src html)",
"futwiz_import_candidate_buy": "Buy candidate for overpriced selling",
"futwiz_import_candidate_relevant": "Candidate is relevant overpriced selling",
"futwiz_import_bid": "Overpriced selling Bid",
"futwiz_import_bin": "Overpriced selling BIN",
"futwiz_import_candidate_resource_id": "Resource id (optional)",
"candidate": "Candidate",
"lastFutWizUpdate": "Last Futwiz Update",
"lastFutBinUpdate": "Last FutBin Update",
"lowestBinUpdateDate": "Lowest Bin Update Date",
"creationDate": "Creation Date",
"eaAssetId": "EA Asset ID",
"stock_count_total": "# Stock total",
"stock_count_real": "# Stock real",
"futBinId": "FutBin ID",
"futBinPrice": "FutBin Price",
"futBinSellingPrice": "FutBin Selling Price",
"futWizId": "Futwiz ID",
"futWizPrice": "Futwiz Price",
"marketAverage": "Ø Price",
"minRange": "Min Range",
"maxRange": "Max Range",
"tradeState": "Trade State",
"futWizSellingPrice": "Futwiz Selling Price",
"highestBuyBinPrice": "Highest Buy Bin Price",
"lastFoundMinRange": "Last Found Min Range",
"lastFoundMaxRange": "Last Found Max Range",
"lastFoundLowestBin": "Last Found Lowest Bin",
"maxBuyPrice": "Max Buy Price",
"buyStyle": "Buy Style",
"remove": "Remove",
"newBuySelective": "New Buy Sel.",
"leagueId": "League ID",
"teamId": "Team ID",
"nationId": "Nation ID",
"note": "Note",
"adjust100": "Adjust 100",
"directReBuy": "Direct ReBuy",
"info": "Info",
"stats": "Stats",
"reBought": "Rebought",
"firstListDate": "First List Date",
"tradepile_items": "Tradepile items",
"sales": "Sales",
"stats_acc_cnt": "# Stock",
"stats_revenue_relist_6": "Rev per relist 6h",
"stats_relist_6": "# Relist 6h",
"stats_sold_6": "# Sold 6h",
"stats_revenue_6": "# Rev 6h",
"stats_ratio_6": "# Ratio 6h",
"stats_revenue_relist_12": "Rev per relist 12h",
"stats_relist_12": "# Relist 12h",
"stats_sold_12": "# Sold 12h",
"stats_revenue_12": "# Rev 12h",
"stats_ratio_12": "# Ratio 12h",
"stats_revenue_relist_24": "Rev per relist 24h",
"stats_relist_24": "# Relist 24h",
"stats_sold_24": "# Sold 24h",
"stats_revenue_24": "# Rev 24h",
"stats_ratio_24": "# Ratio 24h",
"stats_revenue_relist_3d": "Rev per relist 3d",
"stats_relist_3d": "# Relist 3d",
"stats_sold_3d": "# Sold 3d",
"stats_revenue_3d": "# Rev 3d",
"stats_ratio_3d": "# Ratio 3d",
"stats_revenue_relist_1w": "Rev per relist 1w",
"stats_relist_1w": "# Relist 1w",
"stats_sold_1w": "# Sold 1w",
"stats_revenue_1w": "# Rev 1w",
"stats_ratio_1w": "# Ratio 1w",
"stats_revenue_relist_2w": "Rev per relist 2w",
"stats_relist_2w": "# Relist 2w",
"stats_sold_2w": "# Sold 2w",
"stats_revenue_2w": "# Rev 2w",
"stats_ratio_2w": "# Ratio 2w",
"stats_revenue_relist_3w": "Rev per relist 3w",
"stats_relist_3w": "# Relist 3w",
"stats_sold_3w": "# Sold 3w",
"stats_revenue_3w": "# Rev 3w",
"stats_ratio_3w": "# Ratio 3w",
"stats_revenue_relist_4w": "Rev per relist 4w",
"stats_relist_4w": "# Relist 4w",
"stats_sold_4w": "# Sold 4w",
"stats_revenue_4w": "# Rev 4w",
"stats_ratio_4w": "# Ratio 4w",
"stats_revenue_relist_overall": "Rev per relist",
"stats_relist_overall": "# Relist",
"stats_sold_overall": "# Sold",
"stats_revenue_overall": "# Rev",
"stats_ratio_overall": "# Ratio",
"stats_last_update": "Last update",
"last6h": "Last 6 hours",
"last12h": "Last 12 hours",
"last24h": "Last 24 hours",
"last3d": "Last 3 days",
"last1w": "Last 1 week",
"last2w": "Last 2 weeks",
"last3w": "Last 3 weeks",
"last4w": "Last 4 weeks",
"overall": "Over all",
"candidateStats": "Candidate Stats"
},
"tradepile_item":
{
"view": "Tradepile Items",
"item": "Tradepile Item",
"bid": "Starting Bid",
"bin": "Bin Price",
"individualPrice": "Ind. Price",
"min_range": "Min range",
"max_range": "Max range",
"rade_state": "Trade state"
},
"sales":
{
"view": "Sales",
"account": "Account",
"currentBid": "Sold for",
"revenue": "Revenue",
"creation_date": "Creation date (sold)",
"ea_resource_id": "EA resource id",
"ea_asset_id": "EA asset id",
"ea_id": "EA item id",
"ea_trade_id": "EA trade id",
"list_count": "# Lists",
"first_list_date": "First list date",
"re_bought": "re-bought",
"candidate_item": "Candidate",
"gameAccount": "Game Account",
"lastSalePrice": "Bought for",
"reBought": "Re-bought",
"snipedItem": "Sniped"
},
"sniping":
{
"view": "Sniping",
"SelectAccounts": "Select accounts",
"SelectedAccounts": "Selected accounts",
"eaResourceId": "Ea resource id",
"snipeTimeMin": "Sniping min time in ms (10-50)",
"snipeTimeMax": "Sniping max time in ms (10-100)",
"buyItemsMax": "Buy max number of items",
"buyBin": "Buy bin price",
"sellBin": "Sell bin price",
"numberOfSnipingRounds": "Number of sniping rounds",
"prepareAccounts": "Prepare accounts",
"resetAccounts": "Reset accounts",
"startSniping": "Start sniping",
"stopSniping": "Stop sniping",
"secondsWaitBetweenRounds": "Pause between rounds in seconds",
"logs": "Sniping Logs",
"priceCheckLogs": "Price check Logs",
"clearMessages": "Clear messages",
"accountName": "Account Name",
"coins": "Coins",
"accounts_prepared": "Accounts prepared!",
"accounts_not_prepared": "Please prepare accounts before sniping!",
"put_on_tp_only": "Put sniped items on tradepile only (don't sell)",
"gapTimeMin": "Gap min time between accounts in ms (10-990)",
"gapTimeMax": "Gap max time between accounts in ms (10-1000)",
"priceCheckBin": "Price check bin",
"doPriceCheck": "Check price & no. of items with next round",
"checkPriceNow": "Check price now",
"updateAccountSnipingCounts": "Update Account sniping counts",
"snipingCnt1h": "1h",
"snipingCnt3h": "3h",
"snipingCnt6h": "6h",
"snipingCnt12h": "12h",
"snipingCnt24h": "24h",
"snipingCnt3d": "3d",
"snipingCnt1w": "1w",
"running": "Run.",
"blocked": "Blo."
"overview": "Overview"
},
"profile":
{
"view": "Profile"
},
"system":
{
"view": "System",
"config": "System configuration",
"mode_config": "Mode configuration",
"rarities": "Rarities",
"players": "Players",
"import_ea_data": "Import EA data",
"import_ea_data_confirm": "Do you want to import ea data now?",
"import_futwiz_rarities": "Import futwiz ratities",
"import_futwiz_rarities_confirm": "Do you want to import futwiz ratities now?",
"systemActive": "System Active",
"systemRunning": "System Running",
"lastUpdateDate": "Last Update Date",
"lastCheckDate": "Last Check Date",
"sleepHourStart": "Sleep Hour Start",
"sleepHourEnd": "Sleep Hour End",
"checkMaxSales": "Check max Sales",
"numMaxSales": "Num max Sales",
"autoReBuyMinSoldItems": "Auto Re Buy Min Sold Items",
"autoReBuyMinLastHours": "Auto Re Buy Min Last Hours",
"playersHeadline": "Here we display all players from players.json",
"raritiesHeadline": "Here we display all player rarities"
},
"basic":
{
"logout": "Logout",
"company_name": "FUT Machine",
"company_name": "Imaq Pilotage",
"users": "Users",
"new": "New",
"edit_before": "",
@@ -395,7 +22,6 @@
"no": "No",
"dashboard": "Dashboard",
"account": "Account",
"game_account": "Accounts",
"date": "Date",
"time": "Time",
"submit": "Submit",
@@ -408,123 +34,27 @@
"showAllColumns": "Show all columns",
"saveSettings": "Save settings",
"id": "Id",
"note": "Note"
},
"user":
{
"hello": "Hi",
"my": "Meine ",
"email": "Email",
"goals": "Ziele"
"note": "Note",
"number": "#"
},
"overview":
"users":
{
"sort": "Sortierung",
"number": "#",
"logo": "Logo",
"address": "Adresse",
"website": "Website",
"image": "Bild",
"productname": "Produkt",
"storage": "Lagerbestand",
"number_long": "Nummer",
"document": "Dokument",
"type": "Typ",
"uploaded": "Hochgeladen am",
"description": "Beschreibung",
"createdBy": "Erstellt von",
"download": "Download",
"partner": "Partner",
"product": "Produkt",
"sale_user": "Verkäufer",
"sale_partner": "Kunde",
"details": "Details",
"turnover": "Umsatz",
"profit": "Gewinn",
"comment": "Kommentar",
"createdAt": "erstellt am",
"firstName": "Vorname",
"lastName": "Nachname",
"view": "Users",
"user": "User",
"email": "Email",
"unassign": "Zuweisung aufheben",
"compact_view": "Kompaktansicht",
"show_done": "Fertige Aufgaben anzeigen"
"firstname": "Firstname",
"lastname": "Lastname",
"userTrips": "User trips"
},
"form":
{
"mandatory": " is mandatory",
"email_validation": "Please provide a valid email address",
"name": "Name",
"street": "Straße",
"street_no": "Hausnummer",
"zip": "PLZ",
"city": "Stadt",
"country": "Land",
"website": "Website",
"upload_image": "Bild hochladen",
"upload_file": "Datei hochladen",
"firstname": "Vorname",
"lastname": "Nachname",
"rating": "",
"birthday": "Geburtstag",
"position": "Position",
"password": "Password",
"email": "Email",
"phone": "Telefon",
"description": "Beschreibung",
"headline": "Überschrift",
"message": "Nachricht",
"comment": "Kommentar",
"assign_to": "Zuweisen an",
"due_date": "Fälligkeitsdatum",
"prio": "Priorität",
"prio_low": "niedrig",
"prio_medium": "mittel",
"prio_high": "hoch",
"partner": "Partner",
"product": "Produkt",
"turnover": "Umsatz",
"profit": "Gewinn",
"quantity": "Anzahl",
"send": "Speichern",
"search_placeholder": "Suche",
"no_data": "Keine Datensätze gefunden.",
"contact_type": "Kontaktart",
"user": "Benutzer",
"contact": "Kontakt",
"itemMaxBuyPrice_min_error": "Der Wert muss mindestens 0 sein.",
"itemMaxBuyPrice_max_error": "Der Wert darf höchstens 15.000.000 sein.",
"email-validation": "Geben Sie eine gültige E-Mail-Adresse ein",
"profile": "Profile",
"eaCode1": "EA Code 1",
"eaCode2": "EA Code 2",
"eaCode3": "EA Code 3",
"eaCode4": "EA Code 4",
"eaCode5": "EA Code 5",
"eaCode6": "EA Code 6"
"search_placeholder": "Search",
"no_data": "No datasets found."
},
"errors":
{
"sellPriceBinSellStartingBid": "Sell Bin must not be null when Sell Starting Bid is filled",
"sellStartingBidSellPriceBin": "Sell Starting Bid must not be null when Sell Bin is filled",
"sellStartingBidSmallerLastFoundMinRange": "Sell Starting Bid is smaller than Last Found Min Range",
"sellPriceBinLargerLastFoundMaxRange": "Sell Bin is larger than Last Found Max Range",
"sellPriceBinSmallerSellStartingBid": "Sell Bin is smaller or same than Sell Starting Bid",
"sellStartingBidLargerSellPriceBin": "Sell Starting Bid is larger or same than Sell Bin",
"lastFoundMaxRangeSmallerLastFoundMinRange": "Last Found Max Range is smaller or same than Last Found Min Range",
"lastFoundMinRangeLargerLastFoundMaxRange": "Last Found Min Range is larger or same than Last Found Max Range",
"lastFoundMaxRangeLastFoundMinRange": "Last Found Max Range must not be null when Last Found Min Range is filled",
"lastFoundMinRangeLastFoundMaxRange": "Last Found Min Range must not be null when Last Found Max Range is filled",
"buyBinEmpty": "Buy Bin Price must not be null",
"sellBinEmpty": "Sell Bin Price must not be null",
"snipeTimeMinSnipeTimeMax": "Sniping Min Time must be smaller than Sniping Max Time",
"buyBinSellBin": "Buy Bin Price must be smaller than Sell Bin Price",
"snipeNoAccountsSelected": "No accounts selected to snipe"
},
"logs":
{
"view": "Logs",
"message": "Message",
"logType": "Type"

}
}

Двоичные данные
angular/src/assets/images/specific/futcoinbase.jpg Просмотреть файл

До После
Ширина: 1024  |  Высота: 1024  |  Размер: 62 KiB

Двоичные данные
angular/src/assets/images/specific/imaq_logo.jpg Просмотреть файл

До После
Ширина: 450  |  Высота: 450  |  Размер: 35 KiB

+ 2
- 2
angular/src/environments/environment.beta.ts Просмотреть файл

@@ -1,5 +1,5 @@
export const environment = {
production: false,
basePath: 'https://futbase.ddev.site:8454',
apiUrl: 'https://futbase.ddev.site:8454/api'
basePath: 'https://imaq.ddev.site:8454',
apiUrl: 'https://imaq.ddev.site:8454/api'
};

+ 2
- 2
angular/src/environments/environment.development.ts Просмотреть файл

@@ -1,5 +1,5 @@
export const environment = {
production: false,
basePath: 'https://futbase.ddev.site:8454',
apiUrl: 'https://futbase.ddev.site:8454/api'
basePath: 'https://imaq.ddev.site:8454',
apiUrl: 'https://imaq.ddev.site:8454/api'
};

+ 1
- 1
angular/src/index.html Просмотреть файл

@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fut Machine</title>
<title>Imaq Pilotage manager</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="robots" content="noindex,nofollow">


+ 96
- 0
docs/shipping-class-diagram.mermaid Просмотреть файл

@@ -0,0 +1,96 @@
classDiagram
class ShippingCompany {
+**Long id**
+**String name**
}
note for ShippingCompany "Company owning and operating vessels"

class Vessel {
+**Long id**
+**Long companyId**
+**String name**
+**String type**
}
note for Vessel "A ship that can perform multiple trips"

class Trip {
+**Long id**
+**Long vesselId**
+**String pilotageReference**
+**String captainName**
+**Long startLocationId**
+**Long endLocationId**
}
note for Trip "Planned journey with unique pilotage reference"

class Itinerary {
+**Long id**
+**Long tripId**
+**Date plannedDate**
}
note for Itinerary "Planned route with scheduled dates"

class Location {
+**Long id**
+**String name**
+**String type**
}
note for Location "Can be either a port or pilotage area"
note for Location "Note: Consider if locations for worklog (entry/exit points)\n need to be distinguished from regular ports/areas used\n in itineraries and user trips"

class Point {
+**Long id**
+**String name**
+**Float latitude**
+**Float longitude**
}
note for Point "Geographic point that can serve as entry or exit for multiple locations"

class LocationPoint {
+**Long id**
+**Long locationId**
+**Long pointId**
}
note for LocationPoint "Assigns geographic points to locations.\nWhether it's an entry or exit point is determined by the context of the route"

class User {
+**Long id**
+**String firstName**
+**String lastName**
+**String email**
+**String pilotageId**
}
note for User "Pilot with unique pilotage identification number"

class UserTrip {
+**Long id**
+**Long tripId**
+**Long userId**
+**String captainName**
+**Date actualDate**
}
note for UserTrip "Actual execution of a planned trip"

class WorkLog {
+**Long id**
+**Long userTripId**
+**Long startLocationId**
+**Long endLocationId**
+**Date logDate**
+**Duration draught**
}
note for WorkLog "Records of work duration between locations"
ShippingCompany "1" -- "*" Vessel
Vessel "1" -- "*" Trip
Trip "1" -- "1" Itinerary
Trip "1" -- "*" UserTrip
Itinerary "1" -- "*" Location
UserTrip "1" -- "*" Location
UserTrip "1" -- "*" WorkLog
WorkLog "*" -- "2" Location : start/end points
User "1" -- "*" UserTrip
Location "1" -- "*" LocationPoint
LocationPoint "*" -- "1" Point
note "Relationships explained:\n1. Each shipping company has multiple vessels (companyId)\n2. Vessels can make multiple trips (vesselId)\n3. Each trip has one planned itinerary (tripId)\n4. Trips can have multiple actual executions as UserTrips (tripId)\n5. Each itinerary defines a sequence of planned locations\n6. Each user trip records a sequence of actual visited locations\n7. Work logs track time spent between locations (startLocationId/endLocationId)\n8. Each user can perform multiple user trips (userId)\n9. Each location can have multiple points (locationId)\n10. Each point can be used by multiple locations (pointId)"

+ 1
- 1
httpdocs/config/bundles.php Просмотреть файл

@@ -7,11 +7,11 @@ return [
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
Nelmio\CorsBundle\NelmioCorsBundle::class => ['all' => true],
ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
Symfonycasts\MicroMapper\SymfonycastsMicroMapperBundle::class => ['all' => true],
Vich\UploaderBundle\VichUploaderBundle::class => ['all' => true],
Lexik\Bundle\JWTAuthenticationBundle\LexikJWTAuthenticationBundle::class => ['all' => true],
Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle::class => ['dev' => true, 'test' => true],
Zenstruck\Foundry\ZenstruckFoundryBundle::class => ['dev' => true, 'test' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
];

+ 1
- 0
httpdocs/config/packages/lexik_jwt_authentication.yaml Просмотреть файл

@@ -2,3 +2,4 @@ lexik_jwt_authentication:
secret_key: '%env(resolve:JWT_SECRET_KEY)%'
public_key: '%env(resolve:JWT_PUBLIC_KEY)%'
pass_phrase: '%env(JWT_PASSPHRASE)%'
token_ttl: 360000

Двоичные данные
httpdocs/public/media/4798991-schtroumpf-paresseux-66fc1a00f3115842764429.jpg Просмотреть файл

До После
Ширина: 320  |  Высота: 320  |  Размер: 24 KiB

Двоичные данные
httpdocs/public/media/4798991-schtroumpf-paresseux-66fc1a0102b29531652590.jpg Просмотреть файл

До После
Ширина: 320  |  Высота: 320  |  Размер: 24 KiB

Двоичные данные
httpdocs/public/media/gizmo-smurf-vic-george-6731e1217005e794606442.webp Просмотреть файл

До После

Двоичные данные
httpdocs/public/media/handy-comic-book-66fc1a010066a282904886.webp Просмотреть файл

До После

Двоичные данные
httpdocs/public/media/images-6731e120f2ebd169493980.png Просмотреть файл

До После
Ширина: 221  |  Высота: 228  |  Размер: 9.6 KiB

Двоичные данные
httpdocs/public/media/slouchy-smurfling-tv-characters-photo-u1-6731e120f2815244594178.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 5.5 KiB

Двоичные данные
httpdocs/public/media/tailor-smurf-tv-characters-photo-u1-6731e12083dee620188146.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 5.6 KiB

Двоичные данные
httpdocs/public/media/the-king-tv-characters-photo-u1-66fc1a00f06f7970745377.jpg Просмотреть файл

До После
Ширина: 250  |  Высота: 250  |  Размер: 7.5 KiB

+ 1
- 1
httpdocs/src/Controller/SecurityController.php Просмотреть файл

@@ -2,7 +2,7 @@

namespace App\Controller;

use ApiPlatform\Api\IriConverterInterface;
use ApiPlatform\Metadata\IriConverterInterface;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;


+ 55
- 3
httpdocs/src/DataFixtures/AppFixtures.php Просмотреть файл

@@ -37,9 +37,9 @@ class AppFixtures extends Fixture

$system = UserFactory::createOne(
[
'email' => 'admin@spawntree.de',
'firstName' => 'System',
'lastName' => 'System',
'email' => 'jakob@spawntree.de',
'firstName' => 'Jakob',
'lastName' => 'Nordstrøm',
'password' => '12spawntree345',
'roles' => ['ROLE_ADMIN']
]
@@ -72,5 +72,57 @@ class AppFixtures extends Fixture
$system->_set('image', MediaObjectFactory::createOne()->_real());
$adminD->_save();

UserFactory::createOne(
[
'email' => 'pilot1@spawntree.de',
'firstName' => 'Pilot1',
'lastName' => 'Pilot1',
'password' => '12spawntree345',
'image' => MediaObjectFactory::createOne(),
'roles' => ['ROLE_USER']
]
);
$system->_set('image', MediaObjectFactory::createOne()->_real());
$adminD->_save();

UserFactory::createOne(
[
'email' => 'pilot1@spawntree.de',
'firstName' => 'Pilot2',
'lastName' => 'Pilot2',
'password' => '12spawntree345',
'image' => MediaObjectFactory::createOne(),
'roles' => ['ROLE_USER']
]
);
$system->_set('image', MediaObjectFactory::createOne()->_real());
$adminD->_save();

UserFactory::createOne(
[
'email' => 'pilot1@spawntree.de',
'firstName' => 'Pilot3',
'lastName' => 'Pilot3',
'password' => '12spawntree345',
'image' => MediaObjectFactory::createOne(),
'roles' => ['ROLE_USER']
]
);
$system->_set('image', MediaObjectFactory::createOne()->_real());
$adminD->_save();

UserFactory::createOne(
[
'email' => 'pilot1@spawntree.de',
'firstName' => 'Pilot4',
'lastName' => 'Pilot4',
'password' => '12spawntree345',
'image' => MediaObjectFactory::createOne(),
'roles' => ['ROLE_USER']
]
);
$system->_set('image', MediaObjectFactory::createOne()->_real());
$adminD->_save();

}
}

+ 1
- 1
httpdocs/src/EventListener/AuthenticationSuccessListener.php Просмотреть файл

@@ -8,7 +8,7 @@
namespace App\EventListener;


use ApiPlatform\Api\IriConverterInterface;
use ApiPlatform\Metadata\IriConverterInterface;
use App\ApiResource\UserApi;
use App\Entity\User;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;


+ 19
- 9
httpdocs/src/Factory/UserFactory.php Просмотреть файл

@@ -3,6 +3,7 @@
namespace App\Factory;

use App\Entity\User;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Zenstruck\Foundry\Persistence\PersistentProxyObjectFactory;

/**
@@ -15,9 +16,9 @@ final class UserFactory extends PersistentProxyObjectFactory
*
* @todo inject services if required
*/
public function __construct()
public function __construct(private UserPasswordHasherInterface $passwordHasher)
{
parent::__construct();
}

public static function class(): string
@@ -33,11 +34,10 @@ final class UserFactory extends PersistentProxyObjectFactory
protected function defaults(): array|callable
{
return [
'active' => self::faker()->boolean(),
'email' => self::faker()->text(180),
'firstName' => self::faker()->text(255),
'lastName' => self::faker()->text(255),
'password' => self::faker()->text(),
'email' => self::faker()->email(),
'firstName' => self::faker()->firstName(),
'lastName' => self::faker()->lastName(),
'password' => "test",
'roles' => [],
];
}
@@ -48,7 +48,17 @@ final class UserFactory extends PersistentProxyObjectFactory
protected function initialize(): static
{
return $this
// ->afterInstantiate(function(User $user): void {})
;
->afterInstantiate(function(User $user): void {
$user->setPassword($this->passwordHasher->hashPassword(
$user,
$user->getPassword()
));
})
;
}

protected static function getClass(): string
{
return User::class;
}
}

+ 14
- 0
httpdocs/symfony.lock Просмотреть файл

@@ -1,4 +1,18 @@
{
"api-platform/core": {
"version": "4.0",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "4.0",
"ref": "cb9e6b8ceb9b62f32d41fc8ad72a25d5bd674c6d"
},
"files": [
"config/packages/api_platform.yaml",
"config/routes/api_platform.yaml",
"src/ApiResource/.gitignore"
]
},
"api-platform/symfony": {
"version": "4.0",
"recipe": {


Загрузка…
Отмена
Сохранить