Skip to content

Commit d3097c9

Browse files
authored
Merge pull request #19 from mrdatawolf/add_profit_loss_across_server
adds data on the exposure a tz has
2 parents 9c9aba5 + d49691c commit d3097c9

File tree

9 files changed

+490
-6
lines changed

9 files changed

+490
-6
lines changed

app/Http/Controllers/ProfitLoss.php

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
use App\GoodTypes;
5+
use App\Http\Traits\FindingGoods;
6+
use App\TradeZones;
7+
use App\Transactions;
8+
use \Session;
9+
10+
class ProfitLoss extends Controller
11+
{
12+
use FindingGoods;
13+
14+
protected $data;
15+
16+
public function index() {
17+
$title = "Stores P/L";
18+
$storeType = "personal";
19+
$stores = Session::get('stores');
20+
$globalAverages = $this->getGlobalAveragesForGoods('server',$stores);
21+
22+
23+
return view('stores.pl.personal', compact('stores', 'storeType', 'title', 'globalAverages'));
24+
}
25+
26+
27+
/**
28+
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
29+
*/
30+
public function worldIndex() {
31+
$title = "Stores P/L";
32+
$storeType = "world";
33+
$stores = Session::get('stores');
34+
$globalAverages = $this->getGlobalAveragesForGoods('server',$stores);
35+
36+
return view('stores.pl.world', compact('stores','storeType', 'title', 'globalAverages'));
37+
}
38+
39+
40+
/**
41+
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
42+
*/
43+
public function serverIndex() {
44+
$title = "Stores P/L";
45+
$storeType = "server";
46+
$stores = Session::get('stores');
47+
$globalAverages = $this->getGlobalAveragesForGoods('server',$stores);
48+
49+
return view('stores.pl.server', compact('stores','storeType', 'title', 'globalAverages'));
50+
}
51+
52+
53+
/**
54+
* @param $levelToSearch
55+
* @param $stores
56+
*
57+
* @return array
58+
*/
59+
private function getGlobalAveragesForGoods($levelToSearch,$stores) {
60+
//$searchUsername = $currentUser->server_username ?? $currentUser->username;
61+
//todo: to actually limit to a personal/world/server levels we will have to refactor how we get the data
62+
$globalAverages = [];
63+
foreach($stores as $storeData) {
64+
foreach($storeData['Averages'] as $goodType => $goodTypeData) {
65+
foreach($goodTypeData as $transactionType => $transactionTypeData) {
66+
foreach($transactionTypeData as $good => $goodData) {
67+
$globalAverages[$goodType][$transactionType][$good]['price'] = (empty($globalAverages[$goodType][$transactionType][$good]['price'])) ? $goodData['Price'] : $globalAverages[$goodType][$transactionType][$good]['price']+$goodData['Price'];
68+
$globalAverages[$goodType][$transactionType][$good]['count'] = (empty($globalAverages[$goodType][$transactionType][$good]['count'])) ? 1 : $globalAverages[$goodType][$transactionType][$good]['count']+1;
69+
$globalAverages[$goodType][$transactionType][$good]['average'] = $globalAverages[$goodType][$transactionType][$good]['price']/$globalAverages[$goodType][$transactionType][$good]['count'];
70+
}
71+
}
72+
}
73+
}
74+
75+
return $globalAverages;
76+
}
77+
78+
79+
/**
80+
* note: this gets all the transactions for the stores and returns it with the ids converted to titles.
81+
* @return object
82+
*/
83+
public function getTransactionsUsingTitles() {
84+
$transactions = new Transactions();
85+
$this->data = [];
86+
$transactions->chunk(400, function ($transactions) {
87+
foreach($transactions as $transaction) {
88+
$tradeZone = TradeZones::find($transaction->trade_zone_id);
89+
$goodType = GoodTypes::find($transaction->good_type_id);
90+
$item =$this->getGoodFromGoodTypeAndGoodId($goodType, $transaction->good_id);
91+
$transactionType = $this->getTransactionTypeFromId($transaction->transaction_type_id);
92+
$gridName = $tradeZone->title;
93+
$owner = $transaction->owner;
94+
$gps = $tradeZone->gps;
95+
$price = $transaction->value;
96+
$amount = $transaction->amount;
97+
$transactionType = ($transactionType->title === 'buy') ? 'Orders' : 'Offers';
98+
99+
if($tradeZone->count() > 0 && $goodType->count() > 0 && $item->count() > 0) {
100+
if (empty($this->data[$gridName])) {
101+
$this->data[$gridName]['Info']['Owner'] = $owner;
102+
$this->data[$gridName]['Info']['GPS'] = $gps;
103+
$this->data[$gridName]['Totals'] = [];
104+
}
105+
if (empty($this->data[$gridName]['Data'][$goodType->title])) {
106+
$this->data[$gridName]['Data'][$goodType->title]['Offers'] = [];
107+
$this->data[$gridName]['Data'][$goodType->title]['Orders'] = [];
108+
}
109+
if (empty($this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title])) {
110+
$this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title] = [
111+
'Amount' => 0,
112+
'Price' => 0,
113+
'MinPrice' => 0,
114+
'MaxPrice' => 0,
115+
];
116+
$this->data[$gridName]['Averages'][$goodType->title][$transactionType][$item->title]['Price'] = 0;
117+
}
118+
119+
$this->data[$gridName]['Data'][$goodType->title][$transactionType][$item->title]['Transactions'][] = [
120+
'Amount' => $amount,
121+
'Price' => $price
122+
];
123+
$this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Amount'] += $amount;
124+
$this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Price'] += $amount * $price;
125+
if (($this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['MinPrice'] > $price) || $this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['MinPrice'] === 0) {
126+
$this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['MinPrice'] = $price;
127+
}
128+
if ($this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['MaxPrice'] < $price) {
129+
$this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['MaxPrice'] = $price;
130+
}
131+
if ($this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Price'] > 0 && $this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Amount'] > 0) {
132+
$this->data[$gridName]['Averages'][$goodType->title][$transactionType][$item->title]['Price'] = $this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Price'] / $this->data[$gridName]['Totals'][$goodType->title][$transactionType][$item->title]['Amount'];
133+
}
134+
}
135+
}
136+
});
137+
138+
return (object) $this->data;
139+
}
140+
}

app/Http/Controllers/Stores.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ public function index() {
1717
$title = "Stores";
1818
$storeType = "personal";
1919
$stores = Session::get('stores');
20+
$globalAverages = $this->getGlobalAveragesForGoods('server',$stores);
2021

21-
22-
return view('stores.personal', compact('stores', 'storeType', 'title'));
22+
return view('stores.personal', compact('stores', 'storeType', 'title', 'globalAverages'));
2323
}
2424

2525

@@ -30,8 +30,9 @@ public function worldIndex() {
3030
$title = "Stores";
3131
$storeType = "world";
3232
$stores = Session::get('stores');
33+
$globalAverages = $this->getGlobalAveragesForGoods('server',$stores);
3334

34-
return view('stores.world', compact('stores','storeType', 'title'));
35+
return view('stores.world', compact('stores','storeType', 'title', 'globalAverages'));
3536
}
3637

3738

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<html>
2+
<head>
3+
<title>@yield('title')</title>
4+
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
5+
<link href="{{ asset('css/store.css') }}" rel="stylesheet">
6+
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
7+
@yield('style')
8+
</head>
9+
<body>
10+
<div id="app">
11+
@extends('menu.menu')
12+
@extends('ticker.tape')
13+
<div class="container">
14+
@yield('content')
15+
</div>
16+
</div>
17+
@section('scripts')
18+
<script src="{{ asset('js/app.js') }}"></script>
19+
<!-- <script src="https://kit.fontawesome.com/b61a9642d4.js" crossorigin="anonymous"></script> -->
20+
<script src="{{asset('js/clipboard.min.js')}}"></script>
21+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
22+
@show
23+
</body>
24+
</html>

resources/views/menu/menu.blade.php

Lines changed: 70 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,78 @@
7979
<li class="nav-item dropdown">
8080
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">Stores</a>
8181
<ul class="dropdown-menu">
82-
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores') }}';">Personal</button></li>
83-
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores.world') }}';">World</button></li>
84-
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores.server') }}';">Server</button></li>
82+
<li><a class="dropdown-item" href="#"> General &raquo </a>
83+
<ul class="submenu dropdown-menu">
84+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores') }}';">Personal</button></li>
85+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores.world') }}';">World</button></li>
86+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('stores.server') }}';">Server</button></li>
87+
</ul>
88+
</li>
89+
<li><a class="dropdown-item" href="#"> Profit/Loss &raquo </a>
90+
<ul class="submenu dropdown-menu">
91+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('profitvsloss') }}';">Personal</button></li>
92+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('profitvsloss.world') }}';">World</button></li>
93+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('profitvsloss.server') }}';">Server</button></li>
94+
</ul>
95+
</li>
96+
</ul>
97+
</li>
98+
<?php /*
99+
<li class="nav-item dropdown">
100+
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">Trends</a>
101+
<ul class="dropdown-menu">
102+
<li><a class="dropdown-item" href="#"> Stores &raquo </a>
103+
<ul class="submenu dropdown-menu">
104+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
105+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
106+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
107+
</ul>
108+
</li>
109+
<li><a class="dropdown-item" href="#"> Ores &raquo </a>
110+
<ul class="submenu dropdown-menu">
111+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
112+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
113+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
114+
</ul>
115+
</li>
116+
<li><a class="dropdown-item" href="#"> Ingots &raquo </a>
117+
<ul class="submenu dropdown-menu">
118+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
119+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
120+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
121+
</ul>
122+
</li>
123+
<li><a class="dropdown-item" href="#"> Components &raquo </a>
124+
<ul class="submenu dropdown-menu">
125+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
126+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
127+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
128+
</ul>
129+
</li>
130+
<li><a class="dropdown-item" href="#"> Tools &raquo </a>
131+
<ul class="submenu dropdown-menu">
132+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
133+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
134+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
135+
</ul>
136+
</li>
137+
<li><a class="dropdown-item" href="#"> Ammo &raquo </a>
138+
<ul class="submenu dropdown-menu">
139+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
140+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
141+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
142+
</ul>
143+
</li>
144+
<li><a class="dropdown-item" href="#"> Bottles &raquo </a>
145+
<ul class="submenu dropdown-menu">
146+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores') }}';">Personal</button></li>
147+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.world') }}';">World</button></li>
148+
<li><button class="nav-link dropdown-item" onclick="window.location.href='{{ route('trends.stores.server') }}';">Server</button></li>
149+
</ul>
150+
</li>
85151
</ul>
86152
</li>
153+
*/ ?>
87154
<li class="nav-item dropdown">
88155
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">{{ $currentUser->username }}</a>
89156
<ul class="dropdown-menu">

0 commit comments

Comments
 (0)