Added initial page for the Timesheet controller
@ -32,6 +32,7 @@ module.exports = function(grunt) {
|
||||
'public/js/bootstrap-combobox.js',
|
||||
'public/vendor/jspdf/dist/jspdf.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.plugin.split_text_to_size.js',
|
||||
'public/js/script.js',
|
||||
@ -44,7 +45,7 @@ module.exports = function(grunt) {
|
||||
'public/js/simpleexpand.js',
|
||||
'public/js/valign.js',
|
||||
'public/js/bootstrap.min.js',
|
||||
'public/js/simpleexpand.js',
|
||||
'public/js/simpleexpand.js',
|
||||
],
|
||||
dest: 'public/js/built.public.js',
|
||||
nonull: true
|
||||
@ -60,6 +61,7 @@ module.exports = function(grunt) {
|
||||
'public/css/bootstrap-combobox.css',
|
||||
'public/css/typeahead.js-bootstrap.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',
|
||||
],
|
||||
dest: 'public/built.css',
|
||||
|
@ -9,7 +9,14 @@ class TimesheetController extends \BaseController {
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
$data = [
|
||||
'showBreadcrumbs' => false,
|
||||
'timesheet' => [
|
||||
'timesheet_number' => 1
|
||||
]
|
||||
];
|
||||
|
||||
return View::make('timesheets.edit', $data);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
@ -117,11 +117,11 @@ return array(
|
||||
'billed_client' => 'billed client',
|
||||
'billed_clients' => 'billed clients',
|
||||
'active_client' => 'active client',
|
||||
'active_clients' => 'active clients',
|
||||
'active_clients' => 'active clients',
|
||||
'invoices_past_due' => 'Invoices Past Due',
|
||||
'upcoming_invoices' => 'Upcoming invoices',
|
||||
'average_invoice' => 'Average invoice',
|
||||
|
||||
|
||||
// list pages
|
||||
'archive' => 'Archive',
|
||||
'delete' => 'Delete',
|
||||
@ -267,7 +267,7 @@ return array(
|
||||
'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_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_footer' => 'If you did not request this password reset please email our support: ' . CONTACT_EMAIL,
|
||||
|
||||
@ -275,10 +275,10 @@ return array(
|
||||
// Payment page
|
||||
'secure_payment' => 'Secure Payment',
|
||||
'card_number' => 'Card number',
|
||||
'expiration_month' => 'Expiration month',
|
||||
'expiration_month' => 'Expiration month',
|
||||
'expiration_year' => 'Expiration year',
|
||||
'cvv' => 'CVV',
|
||||
|
||||
|
||||
// Security alerts
|
||||
'confide' => [
|
||||
'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.',
|
||||
'wrong_password_reset' => 'Invalid password. Try again',
|
||||
],
|
||||
|
||||
|
||||
// Pro Plan
|
||||
'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_description' => 'One year enrollment in the Invoice Ninja Pro Plan.',
|
||||
'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
|
||||
address associated with your account. To unlock all of the awesome
|
||||
Pro features, please follow the instructions on the invoice to pay
|
||||
<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
|
||||
Pro features, please follow the instructions on the invoice to pay
|
||||
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',
|
||||
|
||||
'unsaved_changes' => 'You have unsaved changes',
|
||||
@ -340,7 +340,7 @@ return array(
|
||||
'archive_product' => 'Archive Product',
|
||||
'updated_product' => 'Successfully updated 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',
|
||||
|
||||
'advanced_settings' => 'Advanced Settings',
|
||||
@ -393,8 +393,8 @@ return array(
|
||||
'notification_quote_sent_subject' => 'Quote :invoice was sent to :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_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.',
|
||||
|
||||
'invoice_fields' => 'Invoice Fields',
|
||||
@ -440,7 +440,7 @@ return array(
|
||||
'quote_number_counter' => 'Quote Number Counter',
|
||||
'share_invoice_counter' => 'Share invoice counter',
|
||||
'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',
|
||||
|
||||
'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_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('api/credits/{client_id?}', array('as'=>'api.credits', 'uses'=>'CreditController@getDatatable'));
|
||||
Route::post('credits/bulk', 'CreditController@bulk');
|
||||
|
||||
Route::resource('timesheets', 'TimesheetController');
|
||||
});
|
||||
|
||||
// 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 |