From 8321eeb0d3253e8e897053bbe5c081ecd7dc1ca9 Mon Sep 17 00:00:00 2001 From: mindnervestech Date: Sat, 8 Nov 2014 21:17:35 +0530 Subject: [PATCH 1/3] dashboard --- app/lang/en/texts.php | 4 + app/views/dashboard.blade.php | 187 ++++++++++++++----------------- public/css/customCss.css | 21 ++++ public/images/blue_bg_img.png | Bin 0 -> 1216 bytes public/images/company_bg_img.png | Bin 0 -> 2652 bytes public/images/gray_bg_img.png | Bin 0 -> 1101 bytes public/images/ring-blue.png | Bin 0 -> 7281 bytes public/images/ring-green.png | Bin 0 -> 7617 bytes public/images/ring-orange.png | Bin 0 -> 7396 bytes 9 files changed, 108 insertions(+), 104 deletions(-) create mode 100644 public/images/blue_bg_img.png create mode 100644 public/images/company_bg_img.png create mode 100644 public/images/gray_bg_img.png create mode 100644 public/images/ring-blue.png create mode 100644 public/images/ring-green.png create mode 100644 public/images/ring-orange.png diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index afe57e561f54..861a3d0acb6d 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -120,6 +120,10 @@ return array( 'billed_client' => 'billed client', 'billed_clients' => 'billed clients', 'active_client' => 'active client', + 'total_outstading' => 'Total Outstading', + 'caps_invoice' => 'INVOICE', + 'accounts_aging' => 'ACCOUNTS AGING', + 'account_dashboard' => 'Account Dashboard', 'active_clients' => 'active clients', 'invoices_past_due' => 'PAST DUE INVOICES', 'upcoming_invoices' => 'UPCOMING INVOICES', diff --git a/app/views/dashboard.blade.php b/app/views/dashboard.blade.php index de05cffef170..1b99d01e995e 100644 --- a/app/views/dashboard.blade.php +++ b/app/views/dashboard.blade.php @@ -10,53 +10,84 @@ function() { $("#informationBox").niceScroll(); //$("#upComingDataScrolls").niceScroll(); + + $("#monthButton").onclick(function(){ + $("#monthButton").removeClass('greyButton').addClass('blueButton'); + $("#yearButton").removeClass('blueButton').addClass('greyButton'); + $("#weekButton").removeClass('blueButton').addClass('greyButton'); + }); + + $("#yearButton").onclick(function(){ + $("#monthButton").removeClass('blueButton').addClass('greyButton'); + $("#yearButton").removeClass('greyButton').addClass('blueButton'); + $("#weekButton").removeClass('blueButton').addClass('greyButton'); + }); + + $("#weekButton").onclick(function(){ + $("#monthButton").removeClass('blueButton').addClass('greyButton'); + $("#yearButton").removeClass('blueButton').addClass('greyButton'); + $("#weekButton").removeClass('greyButton').addClass('blueButton'); + }); + }); - +
+
+
+ + {{ trans('texts.account_dashboard') }} +
+
+ +
+
+
@section('content') -
-
-
-
- -
- {{ $totalIncome }} -
-
- {{ trans('texts.in_total_revenue') }} -
-
-
-
-
-
-
- -
- {{ $billedClients }} -
-
- {{ Utils::pluralize('billed_client', $billedClients) }} -
-
-
-
-
-
-
- -
- {{ $invoicesSent }} -
-
- {{ Utils::pluralize('invoice', $invoicesSent) }} {{ trans('texts.sent') }} -
-
-
-
+
+
+
+
+ +
{{ trans('texts.total_outstading') }}
+
{{ trans('texts.caps_invoice') }}
+ +
{{ $totalIncome }}
+
Across all clients
+
+
+
+
+
+ {{trans('texts.accounts_aging')}} + +
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
@@ -172,60 +203,6 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @foreach ($pastDue as $invoice) @@ -244,20 +221,22 @@
-

{{ trans('texts.total_active_client') }}

-
{{ $activeClients }}
- +

{{ trans('texts.total_active_client') }}

+
{{ $activeClients }}
- +
-

{{ trans('texts.average_invoice') }}

-
{{ $invoiceAvg }}
+

{{ trans('texts.average_invoice') }}

+
{{ $invoiceAvg }}
+
Across all clients
+
+ Month + Year + Week +
diff --git a/public/css/customCss.css b/public/css/customCss.css index 083625fd048e..b8ee9d02cbde 100644 --- a/public/css/customCss.css +++ b/public/css/customCss.css @@ -116,3 +116,24 @@ width: 25%; } +.blueButton{ + background-image: url('../images/blue_bg_img.png'); + background-repeat: no-repeat; + background-size: 100%; + width: 33%; + float: left; + font-weight: bold; + padding: 2.6%; + color: white; +} + +.greyButton{ + background-image: url('../images/gray_bg_img.png'); + background-repeat: no-repeat; + background-size: 100%; + width: 32%; + float: left; + font-weight: bold; + padding: 2%; + margin-top: 1%; +} diff --git a/public/images/blue_bg_img.png b/public/images/blue_bg_img.png new file mode 100644 index 0000000000000000000000000000000000000000..019d849265070b420a126bfc7093dcb0493e61ee GIT binary patch literal 1216 zcmaJ>TWB0r7+x>c7%7Mqq6J|((R!h?bIx3LF3nnYcXsWfn}+Q|Vo5b;X3i#KGMCPr zIFmphnm!aCe5yu4RLGMQ8x8jIP{Bkoq4dF9<3qeZh=>MTEGP)AXEwXB51|7y=bZn1 z|M%bL<$?aEw|DRC&SWy%tNV>QT?gs=WY=BvyG&Lhx;#Y6L*$^}BrytcreOOfW~we4 z#dVDAsUsJ0UnX~M#OS9R1PceOoP6=F05R;aZ6A;Jun3NHj{v^q> z)YFX++@Mz5B=(|qqG-za1O+_I0^W7gxLW9l)bamrY>AErBi9z`$X%`)g+{XW z$Lg-`PevYGz8aSvkluXn(|fyipS=5x?~gt90r%T&A06+x@0HyrXFmJs=$={s^O3@= zwEpn*8&_UkSo-JcLV4Gn<8w>qzn9i~*WdkR?XPc7Jpb!k@^cf{pE+|P_x1eRcZcei z4=8W{=+7NK^YhBt^XIoy%*7eqWuB&mNzBFlwbiXE?ZLI9Q^Btz;>vg*!Fa1v1CJ*)ezN@4eU3e@eC7 KZ_F1*X8r@u7onE` literal 0 HcmV?d00001 diff --git a/public/images/company_bg_img.png b/public/images/company_bg_img.png new file mode 100644 index 0000000000000000000000000000000000000000..b52e3332f09f50b6dd16da8791d3b5eafb18b759 GIT binary patch literal 2652 zcmeHH>r)d~6u%%^qz1GzEra&4U8k*#B)gk;wnQXsQe&IQKomN|Ym;nX4augPjfrox zooYKin4+j{r%Y?9{m@DsrzjAHhgQXQuojCVLbbM?GAKT<6rqg08;JFT;~&s5ANJgH za?bC(&wJU{*CYvZ6951b^AaitfaxLl-V;9qe(PRToP;DrFy;%noJ$DOJOeVFoSi|; z9=eptVQA;-w>p?~0H$qbZTUjJDdBjF69ZxETSlGo`FokKSl% zK@rxeNApw`+~Uh(%Gf1qcqVs^)#g~^cIcdF#v&v=L_z=$BhX05Q||SXAw3$wCE;5X zV<-|)5!`xoGN^n@Hj>5h45E_ZQU|Wa5j7zr6iSUolZMD~0>^MUM#!avhE&K&97m>p zDD=iVU1Sbrn(_rXJz6FRJ`%%%!JsUtka2t|M(A`p5koGQLJg^ZwO61+Qm=o06oF#= z4xaT1Eayc;MB2^;1U(8PolL>wvsmr}d;L>|f+fR3v=1X>IOg$)c}2ASLJsp^7!TF< z+gAG+EQj%P0p0=o;hG;chP8XNBT*4XLoVZ4*c7^);v4}F;}y)59)j6+sx427^&&fLKOFR;JRZ z#-p}ouV0|O4kqfCg?^`OwU4wVvv`IUINru_<SWN109(CQRYnjn-?SXqr!tHrfa9d5TP6)KlYr6y1ehKPxS z^S~fQMQ}RB=l!*S%>Bh;yl|U%xHin`Tr&VOd}b=s7P@$?uX*LOdEnhEy2I{M%TnH~ z-J1LPoa2SaZf9S`thVKs;`o_pNpVGP{*l>y%;u6k3D(;7%hniGYWe=0>aO1pRQ?fK zReS1i+ujTDUvU%ZKEX6sl2%IV!rM%>skH-^mdJk3-oN9cs-p{U#){lK`{MfR_esKb zOypX>vu!zftaY5b@N_6f6v)0H_qqofhZNtcC5t?=tMy5d z&R%+Xx=7<+n!XtweJ4k*_O!K)wYRtLoVc~+-f&|} zQc_Y&Q}}48F5}<<2=T$Wwt`nS1<(CpDuh>~BCcw^d;CsERb6#;b^X%Rn((URg2Ca5 ziHUhNMGd#VxmWK#UI>6(^7o;x)>p%8;hB;(UMc>>GXDnG)Kr6E*e~whk;8d~KL+}) zHa9m978f*+tsRyRb?22=#sH*4c{5Sd0YK$vvrOZIZ$GgoZ^eoY&u=#sCvF@V9UVQ} z+1Yvie0O)^hdoCZUW)~lLuof-D@SJb2cC%u)$Oi-uD_$#dLk(}v@U$;(5DM>+D*@=_Hm1T$izkm?>>+IPb}|5zShtI} z*x6n@F(Z4 literal 0 HcmV?d00001 diff --git a/public/images/gray_bg_img.png b/public/images/gray_bg_img.png new file mode 100644 index 0000000000000000000000000000000000000000..de6f941b6de4efcfaacfde8e378b41ff6ed1505e GIT binary patch literal 1101 zcmaJ=J8#oa6gH1mrBx9EfdmrLl{-*S9sBxitD#Ebghr}Ml}06Oy|!-}tMLQ-mZTj( zbVFi84EzNK#KM4(C>Kw{zX2N-yaFmjz29jaQg?>)!o`_B8}%JPlr$xD+A!%SBf ztr|Vo=zC>ioPM9o?mec*MN)2%)u>52D8Wp@iyRE90ouSdjJ)kT@9{jtoY?j24brfe zOg9R0D6`3RgP5WjW`3a?BX<)M;NT5E%(K5=@3Fx5^6V|e7VNl$TmIrsf>(Ez>+a5` zYk2I!buiyGDM5e<0^Oh;re-(K_IOQt&(u5%dM0Eu&-R0A*ejqEB^W3+R(`YMkX+N4XLolt~(T*}h8jX1~@o7^~+lt(+0EeV% z&TMbi!LKhGH`kCK8Ry`7HmJ*Cel+>fBJ)D4*Rz#w-6~&-b$~rECSsS^2 zm?^JjP3q@t;l#g-y-E@VpjTznKO~B#Eb5}GC>+8H;$%b8IY-eX&e4z~dm4gR(AWXq zJ5as;lu`}NBpwE2Vk9C-HzW>0D08&38mH@m&KZK^$db}*Dk@}o8X}(!&VfN1s_1lP z*U?%~VYFB{q}!CxwfO+jw{+!D)hg7xUw?cooMONkW`FgObJqR)^3UyZY2scJO)Y(S zI>YXK_kX_mb?)7_YsX)#k6oB+JQ$l=Ti@S3-#AkIeE;&XamH?+JpJm~*r#m4tL0_u Id2xOBACOvB-2eap literal 0 HcmV?d00001 diff --git a/public/images/ring-blue.png b/public/images/ring-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..531ec0e79773d4236f5fd096567db015ca614aa1 GIT binary patch literal 7281 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 literal 0 HcmV?d00001 diff --git a/public/images/ring-green.png b/public/images/ring-green.png new file mode 100644 index 0000000000000000000000000000000000000000..15906d459a60db3ae6b12cba5f5136dd4a3239b2 GIT binary patch literal 7617 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 literal 0 HcmV?d00001 diff --git a/public/images/ring-orange.png b/public/images/ring-orange.png new file mode 100644 index 0000000000000000000000000000000000000000..96704c9afc62d7fdd9a52246681d4a72477bf794 GIT binary patch literal 7396 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�-pq!z5GSv|X+UYGA`KNm%d!j)ufw(`hZ!6ob{gE6qA3oeq(+S)TgM(rK$mML z_-9P;l8KrcO2bFQAF?ke@x_tlK^I(afEK|c_FdUMGC20UX5rWCV#}E2KPvK!wK!j2 zOQOoB#i>~em)$Obo_$uqoUUB}|F}b0NpWHtVc5DXg-it39ptL;pW71@&Y_E~{ME{y nX~30{GV|{P-^X{K-XQ>g4tzW Date: Tue, 11 Nov 2014 11:52:12 +0530 Subject: [PATCH 2/3] dashborad page --- app/controllers/DashboardController.php | 61 ++++++++++++++++- app/lang/en/texts.php | 5 +- app/views/dashboard.blade.php | 88 +++++++++++++++---------- app/views/header.blade.php | 3 +- public/css/customCss.css | 40 ++++++++++- 5 files changed, 157 insertions(+), 40 deletions(-) diff --git a/app/controllers/DashboardController.php b/app/controllers/DashboardController.php index 72f060ad0870..4256dd7ead10 100644 --- a/app/controllers/DashboardController.php +++ b/app/controllers/DashboardController.php @@ -28,7 +28,51 @@ class DashboardController extends \BaseController { ->where('clients.is_deleted', '=', false) ->groupBy('accounts.id') ->first(); - + + // for 0- 30 day Invoice Price + $thirtyDayInvoice = Invoice::scope() + ->where('invoice_date', '<', date('Y-m-d')) + ->where('balance', '>', 0) + ->where('is_recurring', '=', false) + ->where('is_quote', '=', false) + ->where('is_deleted', '=', false) + ->orderBy('invoice_date', 'dsc')->take(30)->get(); + + $totalThirtyDay = Utils::getTotalValue($thirtyDayInvoice); + + // for 31- 60 day Invoice Price + $thirtyToSixtyDay = Invoice::scope() + ->where('invoice_date', '<', date('Y-m-d')) + ->where('balance', '>', 0) + ->where('is_recurring', '=', false) + ->where('is_quote', '=', false) + ->where('is_deleted', '=', false) + ->orderBy('invoice_date', 'dsc')->skip(30)->take(30)->get(); + + $totalThirtyToSixtyDay = Utils::getTotalValue($thirtyToSixtyDay); + + // for 61- 90 day Invoice Price + $sixtyToNintyDay = Invoice::scope() + ->where('invoice_date', '<', date('Y-m-d')) + ->where('balance', '>', 0) + ->where('is_recurring', '=', false) + ->where('is_quote', '=', false) + ->where('is_deleted', '=', false) + ->orderBy('invoice_date', 'dsc')->skip(60)->take(30)->get(); + + $totalSixtyToNintyDay = Utils::getTotalValue($sixtyToNintyDay); + + // for 90- above day Invoice Price + $nintyAndAboveDay = Invoice::scope() + ->where('invoice_date', '<', date('Y-m-d')) + ->where('balance', '>', 0) + ->where('is_recurring', '=', false) + ->where('is_quote', '=', false) + ->where('is_deleted', '=', false) + ->orderBy('invoice_date', 'dsc')->skip(90)->take(100000)->get(); + + $totalNintyAndAboveDay = Utils::getTotalValue($nintyAndAboveDay); + $activities = Activity::where('activities.account_id', '=', Auth::user()->account_id) ->orderBy('created_at', 'desc')->take(6)->get(); @@ -47,8 +91,14 @@ class DashboardController extends \BaseController { ->where('is_quote', '=', false) ->where('is_deleted', '=', false) ->orderBy('due_date', 'asc')->take(6)->get(); + + //To do + $monthValue = '12345.67'; + $yearValue = '987654.32'; + $weekValue ='57684.73'; $data = [ + 'account' => Account::with('users')->findOrFail(Auth::user()->account_id), 'totalIncome' => Utils::formatMoney($totalIncome ? $totalIncome->value : 0, Session::get(SESSION_CURRENCY)), 'billedClients' => $metrics ? $metrics->billed_clients : 0, 'invoicesSent' => $metrics ? $metrics->invoices_sent : 0, @@ -56,7 +106,14 @@ class DashboardController extends \BaseController { 'invoiceAvg' => Utils::formatMoney(($metrics ? $metrics->invoice_avg : 0), Session::get(SESSION_CURRENCY)), 'activities' => $activities, 'pastDue' => $pastDue, - 'upcoming' => $upcoming + 'upcoming' => $upcoming, + 'monthValue' => Utils::formatMoney(($monthValue ), Session::get(SESSION_CURRENCY)), + 'yearValue' => Utils::formatMoney(($yearValue ), Session::get(SESSION_CURRENCY)), + 'weekValue' => Utils::formatMoney(($weekValue ), Session::get(SESSION_CURRENCY)), + 'totalThirtyDayInvoice' => Utils::formatMoney(($totalThirtyDay), Session::get(SESSION_CURRENCY)), + 'totalThirtyToSixtyDay' => Utils::formatMoney(($totalThirtyToSixtyDay), Session::get(SESSION_CURRENCY)), + 'totalSixtyToNintyDay' => Utils::formatMoney(($totalSixtyToNintyDay), Session::get(SESSION_CURRENCY)), + 'totalNintyAndAboveDay' =>Utils::formatMoney(($totalNintyAndAboveDay), Session::get(SESSION_CURRENCY)) ]; return View::make('dashboard', $data); diff --git a/app/lang/en/texts.php b/app/lang/en/texts.php index 9ccd29df8923..0495e598e015 100644 --- a/app/lang/en/texts.php +++ b/app/lang/en/texts.php @@ -129,7 +129,10 @@ return array( 'upcoming_invoices' => 'UPCOMING INVOICES', 'average_invoice' => 'Invoice Average', 'total_active_client'=> 'Total Active Clients', - + '0_30_days_old'=> '0-30 DAYS OLD', + '31_60_days_old' => '31-60 DAYS OLD', + '61_90_days_old'=> '61-90 DAYS OLD', + '91_aboue_days_old' => '91-ABOVE DAYS OLD', // list pages 'archive' => 'Archive', diff --git a/app/views/dashboard.blade.php b/app/views/dashboard.blade.php index 1b99d01e995e..6ecd163b3779 100644 --- a/app/views/dashboard.blade.php +++ b/app/views/dashboard.blade.php @@ -1,45 +1,52 @@ @extends('header') + - -

+
{{ trans('texts.account_dashboard') }}
-
- +
+ +
+ {{ HTML::image($account->getLogoPath(), "Logo") }}   +

@@ -65,24 +72,35 @@
-
+
-
- +
+ {{$totalThirtyDayInvoice}} + {{trans('texts.0_30_days_old')}}
-
+
-
- +
+ {{$totalThirtyToSixtyDay}} + {{trans('texts.31_60_days_old')}}
-
+
-
- +
+ {{$totalSixtyToNintyDay}} + {{trans('texts.61_90_days_old')}} +
+
+
+
+
+
+ {{$totalNintyAndAboveDay}} + {{trans('texts.91_aboue_days_old')}}
@@ -152,7 +170,7 @@
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
adssdfdssdfsdfs
{{ $invoice->client->getDisplayName() }}
-
+
@@ -175,9 +193,8 @@

 

-
-

 

- +
+
@@ -199,7 +216,7 @@
-
+
@@ -219,7 +236,7 @@
-
+

{{ trans('texts.total_active_client') }}

{{ $activeClients }}
@@ -230,7 +247,7 @@

{{ trans('texts.average_invoice') }}

-
{{ $invoiceAvg }}
+
{{ $yearValue }}
Across all clients
Month @@ -239,6 +256,7 @@
+
@stop \ No newline at end of file diff --git a/app/views/header.blade.php b/app/views/header.blade.php index 03f22e47d4e1..f60de24b7e2c 100755 --- a/app/views/header.blade.php +++ b/app/views/header.blade.php @@ -3,7 +3,8 @@ @section('head') - + +