Added initial page for the Timesheet controller
@ -32,6 +32,7 @@ module.exports = function(grunt) {
|
|||||||
'public/js/bootstrap-combobox.js',
|
'public/js/bootstrap-combobox.js',
|
||||||
'public/vendor/jspdf/dist/jspdf.min.js',
|
'public/vendor/jspdf/dist/jspdf.min.js',
|
||||||
'public/vendor/handsontable/dist/jquery.handsontable.full.min.js',
|
'public/vendor/handsontable/dist/jquery.handsontable.full.min.js',
|
||||||
|
'public/vendor/handsontable/lib/jquery-ui/js/jquery-ui.custom.min.js',
|
||||||
//'public/js/jspdf.source.js',
|
//'public/js/jspdf.source.js',
|
||||||
//'public/js/jspdf.plugin.split_text_to_size.js',
|
//'public/js/jspdf.plugin.split_text_to_size.js',
|
||||||
'public/js/script.js',
|
'public/js/script.js',
|
||||||
@ -44,7 +45,7 @@ module.exports = function(grunt) {
|
|||||||
'public/js/simpleexpand.js',
|
'public/js/simpleexpand.js',
|
||||||
'public/js/valign.js',
|
'public/js/valign.js',
|
||||||
'public/js/bootstrap.min.js',
|
'public/js/bootstrap.min.js',
|
||||||
'public/js/simpleexpand.js',
|
'public/js/simpleexpand.js',
|
||||||
],
|
],
|
||||||
dest: 'public/js/built.public.js',
|
dest: 'public/js/built.public.js',
|
||||||
nonull: true
|
nonull: true
|
||||||
@ -60,6 +61,7 @@ module.exports = function(grunt) {
|
|||||||
'public/css/bootstrap-combobox.css',
|
'public/css/bootstrap-combobox.css',
|
||||||
'public/css/typeahead.js-bootstrap.css',
|
'public/css/typeahead.js-bootstrap.css',
|
||||||
'public/vendor/handsontable/dist/jquery.handsontable.full.css',
|
'public/vendor/handsontable/dist/jquery.handsontable.full.css',
|
||||||
|
'public/vendor/handsontable/lib/jquery-ui/css/ui-bootstrap/jquery-ui.custom.css',
|
||||||
'public/css/style.css',
|
'public/css/style.css',
|
||||||
],
|
],
|
||||||
dest: 'public/built.css',
|
dest: 'public/built.css',
|
||||||
|
@ -9,7 +9,14 @@ class TimesheetController extends \BaseController {
|
|||||||
*/
|
*/
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
//
|
$data = [
|
||||||
|
'showBreadcrumbs' => false,
|
||||||
|
'timesheet' => [
|
||||||
|
'timesheet_number' => 1
|
||||||
|
]
|
||||||
|
];
|
||||||
|
|
||||||
|
return View::make('timesheets.edit', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
@ -117,11 +117,11 @@ return array(
|
|||||||
'billed_client' => 'billed client',
|
'billed_client' => 'billed client',
|
||||||
'billed_clients' => 'billed clients',
|
'billed_clients' => 'billed clients',
|
||||||
'active_client' => 'active client',
|
'active_client' => 'active client',
|
||||||
'active_clients' => 'active clients',
|
'active_clients' => 'active clients',
|
||||||
'invoices_past_due' => 'Invoices Past Due',
|
'invoices_past_due' => 'Invoices Past Due',
|
||||||
'upcoming_invoices' => 'Upcoming invoices',
|
'upcoming_invoices' => 'Upcoming invoices',
|
||||||
'average_invoice' => 'Average invoice',
|
'average_invoice' => 'Average invoice',
|
||||||
|
|
||||||
// list pages
|
// list pages
|
||||||
'archive' => 'Archive',
|
'archive' => 'Archive',
|
||||||
'delete' => 'Delete',
|
'delete' => 'Delete',
|
||||||
@ -267,7 +267,7 @@ return array(
|
|||||||
'notification_invoice_viewed_subject' => 'Invoice :invoice was viewed by :client',
|
'notification_invoice_viewed_subject' => 'Invoice :invoice was viewed by :client',
|
||||||
'notification_invoice_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.',
|
'notification_invoice_paid' => 'A payment of :amount was made by client :client towards Invoice :invoice.',
|
||||||
'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.',
|
'notification_invoice_sent' => 'The following client :client was emailed Invoice :invoice for :amount.',
|
||||||
'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.',
|
'notification_invoice_viewed' => 'The following client :client viewed Invoice :invoice for :amount.',
|
||||||
'reset_password' => 'You can reset your account password by clicking the following link:',
|
'reset_password' => 'You can reset your account password by clicking the following link:',
|
||||||
'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL,
|
'reset_password_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL,
|
||||||
|
|
||||||
@ -275,10 +275,10 @@ return array(
|
|||||||
// Payment page
|
// Payment page
|
||||||
'secure_payment' => 'Secure Payment',
|
'secure_payment' => 'Secure Payment',
|
||||||
'card_number' => 'Card number',
|
'card_number' => 'Card number',
|
||||||
'expiration_month' => 'Expiration month',
|
'expiration_month' => 'Expiration month',
|
||||||
'expiration_year' => 'Expiration year',
|
'expiration_year' => 'Expiration year',
|
||||||
'cvv' => 'CVV',
|
'cvv' => 'CVV',
|
||||||
|
|
||||||
// Security alerts
|
// Security alerts
|
||||||
'confide' => [
|
'confide' => [
|
||||||
'too_many_attempts' => 'Too many attempts. Try again in few minutes.',
|
'too_many_attempts' => 'Too many attempts. Try again in few minutes.',
|
||||||
@ -289,7 +289,7 @@ return array(
|
|||||||
'password_reset' => 'Your password has been changed successfully.',
|
'password_reset' => 'Your password has been changed successfully.',
|
||||||
'wrong_password_reset' => 'Invalid password. Try again',
|
'wrong_password_reset' => 'Invalid password. Try again',
|
||||||
],
|
],
|
||||||
|
|
||||||
// Pro Plan
|
// Pro Plan
|
||||||
'pro_plan' => [
|
'pro_plan' => [
|
||||||
'remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan',
|
'remove_logo' => ':link to remove the Invoice Ninja logo by joining the Pro Plan',
|
||||||
@ -310,11 +310,11 @@ return array(
|
|||||||
'pro_plan_product' => 'Pro Plan',
|
'pro_plan_product' => 'Pro Plan',
|
||||||
'pro_plan_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
|
'pro_plan_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
|
||||||
'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!<p/> <br/>
|
'pro_plan_success' => 'Thanks for choosing Invoice Ninja\'s Pro plan!<p/> <br/>
|
||||||
<b>Next Steps</b><p/>A payable invoice has been sent to the email
|
<b>Next Steps</b><p/>A payable invoice has been sent to the email
|
||||||
address associated with your account. To unlock all of the awesome
|
address associated with your account. To unlock all of the awesome
|
||||||
Pro features, please follow the instructions on the invoice to pay
|
Pro features, please follow the instructions on the invoice to pay
|
||||||
for a year of Pro-level invoicing.<p/>
|
for a year of Pro-level invoicing.<p/>
|
||||||
Can\'t find the invoice? Need further assistance? We\'re happy to help
|
Can\'t find the invoice? Need further assistance? We\'re happy to help
|
||||||
-- email us at contact@invoiceninja.com',
|
-- email us at contact@invoiceninja.com',
|
||||||
|
|
||||||
'unsaved_changes' => 'You have unsaved changes',
|
'unsaved_changes' => 'You have unsaved changes',
|
||||||
@ -340,7 +340,7 @@ return array(
|
|||||||
'archive_product' => 'Archive Product',
|
'archive_product' => 'Archive Product',
|
||||||
'updated_product' => 'Successfully updated product',
|
'updated_product' => 'Successfully updated product',
|
||||||
'created_product' => 'Successfully created product',
|
'created_product' => 'Successfully created product',
|
||||||
'archived_product' => 'Successfully archived product',
|
'archived_product' => 'Successfully archived product',
|
||||||
'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan',
|
'pro_plan_custom_fields' => ':link to enable custom fields by joining the Pro Plan',
|
||||||
|
|
||||||
'advanced_settings' => 'Advanced Settings',
|
'advanced_settings' => 'Advanced Settings',
|
||||||
@ -393,8 +393,8 @@ return array(
|
|||||||
'notification_quote_sent_subject' => 'Quote :invoice was sent to :client',
|
'notification_quote_sent_subject' => 'Quote :invoice was sent to :client',
|
||||||
'notification_quote_viewed_subject' => 'Quote :invoice was viewed by :client',
|
'notification_quote_viewed_subject' => 'Quote :invoice was viewed by :client',
|
||||||
'notification_quote_sent' => 'The following client :client was emailed Quote :invoice for :amount.',
|
'notification_quote_sent' => 'The following client :client was emailed Quote :invoice for :amount.',
|
||||||
'notification_quote_viewed' => 'The following client :client viewed Quote :invoice for :amount.',
|
'notification_quote_viewed' => 'The following client :client viewed Quote :invoice for :amount.',
|
||||||
|
|
||||||
'session_expired' => 'Your session has expired.',
|
'session_expired' => 'Your session has expired.',
|
||||||
|
|
||||||
'invoice_fields' => 'Invoice Fields',
|
'invoice_fields' => 'Invoice Fields',
|
||||||
@ -440,7 +440,7 @@ return array(
|
|||||||
'quote_number_counter' => 'Quote Number Counter',
|
'quote_number_counter' => 'Quote Number Counter',
|
||||||
'share_invoice_counter' => 'Share invoice counter',
|
'share_invoice_counter' => 'Share invoice counter',
|
||||||
'invoice_issued_to' => 'Invoice issued to',
|
'invoice_issued_to' => 'Invoice issued to',
|
||||||
'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix',
|
'invalid_counter' => 'To prevent a possible conflict please set either an invoice or quote number prefix',
|
||||||
'mark_sent' => 'Mark sent',
|
'mark_sent' => 'Mark sent',
|
||||||
|
|
||||||
'gateway_help_1' => ':link to sign up for Authorize.net.',
|
'gateway_help_1' => ':link to sign up for Authorize.net.',
|
||||||
@ -449,4 +449,5 @@ return array(
|
|||||||
'gateway_help_23' => 'Note: use your secret API key, not your publishable API key.',
|
'gateway_help_23' => 'Note: use your secret API key, not your publishable API key.',
|
||||||
'gateway_help_27' => ':link to sign up for TwoCheckout.',
|
'gateway_help_27' => ':link to sign up for TwoCheckout.',
|
||||||
|
|
||||||
);
|
'timesheets' => 'Timesheets',
|
||||||
|
);
|
||||||
|
@ -132,6 +132,8 @@ Route::group(array('before' => 'auth'), function()
|
|||||||
Route::get('credits/create/{client_id?}/{invoice_id?}', 'CreditController@create');
|
Route::get('credits/create/{client_id?}/{invoice_id?}', 'CreditController@create');
|
||||||
Route::get('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));
|
Route::get('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));
|
||||||
Route::post('credits/bulk', 'CreditController@bulk');
|
Route::post('credits/bulk', 'CreditController@bulk');
|
||||||
|
|
||||||
|
Route::resource('timesheets', 'TimesheetController');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Route group for API
|
// Route group for API
|
||||||
|
82
app/views/timesheets/edit.blade.php
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
@extends('header')
|
||||||
|
|
||||||
|
@section('head')
|
||||||
|
@parent
|
||||||
|
@stop
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<ol class="breadcrumb">
|
||||||
|
<li>{{ link_to('timesheets', trans('texts.timesheets')) }}</li>
|
||||||
|
<li class='active'>{{ 1 }}</li>
|
||||||
|
</ol>
|
||||||
|
<div id="timesheet_table" style="height: 300px; overflow: auto">
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var table = $("#timesheet_table");
|
||||||
|
table.handsontable({
|
||||||
|
colHeaders: ['','Date', 'From', 'To', 'Hours', 'Owner', 'Project', 'Code', 'Tags' ],
|
||||||
|
startRows: 6,
|
||||||
|
startCols: 4,
|
||||||
|
//minSpareRows: 1,
|
||||||
|
stretchH: 'last',
|
||||||
|
colWidths: [25, 97, 50, 50, 50, 150, 150, 150, 150],
|
||||||
|
columns: [
|
||||||
|
{ data: "selected", type: 'checkbox' },
|
||||||
|
{ data: "date", type: 'date', dateFormat: 'yy-mm-dd' },
|
||||||
|
{ data: "from" },
|
||||||
|
{ data: "to" },
|
||||||
|
{ data: "hours", type: 'numeric', format: '0.00' },
|
||||||
|
{ data: "owner" },
|
||||||
|
{ data: "project", type: 'dropdown', source: ["Hobby", "Large Development"], strict: true },
|
||||||
|
{ data: "code", type: 'dropdown', source: ["DAMCO", "MYDAMCO", "SAXO", "STUDIE"], strict: true },
|
||||||
|
{ data: "tags", type: 'dropdown', source: ["design", "development", "bug"], strict: false },
|
||||||
|
],
|
||||||
|
//cells: function(row, col, prop) {
|
||||||
|
// return {
|
||||||
|
// type : {
|
||||||
|
// renderer : function (instance, td, row, col, prop, value, cellProperties) {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
//}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var data = [
|
||||||
|
{ selected: true, date:'2014-01-01', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-02', from:'00:00', to:'23:00', hours:'11', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-03', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-04', from:'23:00', to:'24:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-01', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-02', from:'00:00', to:'23:00', hours:'11', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-03', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-04', from:'23:00', to:'24:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-01', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-02', from:'00:00', to:'23:00', hours:'11', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-03', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-04', from:'23:00', to:'24:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-01', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-02', from:'00:00', to:'23:00', hours:'11', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-03', from:'10:00', to:'11:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
{ selected: true, date:'2014-01-04', from:'23:00', to:'24:00', hours:'1', owner:'Troels Liebe Bentsen', project:'Hobby', code:'TEST', tags:'design'},
|
||||||
|
];
|
||||||
|
|
||||||
|
table.handsontable("loadData", data);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/events",
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'GET',
|
||||||
|
success: function (res) {
|
||||||
|
$("#dataTable").data("handsontable").loadData(res);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
</script>
|
||||||
|
@stop
|
1615
public/built.css
BIN
public/images/ui-bg_flat_0_aaaaaa_40x100.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
public/images/ui-bg_glass_55_fbf9ee_1x400.png
Normal file
After Width: | Height: | Size: 120 B |
BIN
public/images/ui-bg_glass_65_ffffff_1x400.png
Normal file
After Width: | Height: | Size: 105 B |
BIN
public/images/ui-bg_glass_75_dadada_1x400.png
Normal file
After Width: | Height: | Size: 111 B |
BIN
public/images/ui-bg_glass_75_e6e6e6_1x400.png
Normal file
After Width: | Height: | Size: 110 B |
BIN
public/images/ui-bg_glass_75_ffffff_1x400.png
Normal file
After Width: | Height: | Size: 107 B |
BIN
public/images/ui-bg_highlight-soft_75_cccccc_1x100.png
Normal file
After Width: | Height: | Size: 101 B |
BIN
public/images/ui-bg_inset-soft_95_fef1ec_1x100.png
Normal file
After Width: | Height: | Size: 123 B |
BIN
public/images/ui-icons_222222_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
public/images/ui-icons_2e83ff_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
public/images/ui-icons_454545_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
public/images/ui-icons_888888_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
public/images/ui-icons_cd0a0a_256x240.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
public/images/ui-icons_f6cf3b_256x240.png
Normal file
After Width: | Height: | Size: 8.7 KiB |