[Jifty-commit] r4495 - in apps/spensive: . lib/Spensive
lib/Spensive/Model lib/Spensive/View
jifty-commit at lists.jifty.org
jifty-commit at lists.jifty.org
Tue Nov 20 12:12:55 EST 2007
Author: jesse
Date: Tue Nov 20 12:12:52 2007
New Revision: 4495
Modified:
apps/spensive/ (props changed)
apps/spensive/etc/config.yml
apps/spensive/lib/Spensive/Dispatcher.pm
apps/spensive/lib/Spensive/Model/Email.pm
apps/spensive/lib/Spensive/Model/EmailAttachment.pm
apps/spensive/lib/Spensive/Model/ExpenseReport.pm
apps/spensive/lib/Spensive/Model/User.pm
apps/spensive/lib/Spensive/View.pm
apps/spensive/lib/Spensive/View/Expenses.pm
apps/spensive/lib/Spensive/View/Reports.pm
Log:
r67478 at pinglin (orig r7385): jesse | 2007-09-22 16:13:28 -0400
snapshot
Modified: apps/spensive/etc/config.yml
==============================================================================
--- apps/spensive/etc/config.yml (original)
+++ apps/spensive/etc/config.yml Tue Nov 20 12:12:52 2007
@@ -48,7 +48,7 @@
default_escape_flags: h
error_format: text
error_mode: fatal
- Port: 8888
+ Port: 9999
ServeStaticFiles: 1
# ServerClass: Jifty::Server::Prefork
StaticRoot: share/web/static
Modified: apps/spensive/lib/Spensive/Dispatcher.pm
==============================================================================
--- apps/spensive/lib/Spensive/Dispatcher.pm (original)
+++ apps/spensive/lib/Spensive/Dispatcher.pm Tue Nov 20 12:12:52 2007
@@ -23,18 +23,18 @@
}
};
-on qr'/report/(\d+)/' => run {
+on qr'/reports/(\d+)/' => run {
my $report = Spensive::Model::ExpenseReport->new();
$report->load($1);
my $reports = Jifty->web->navigation->child('Reports');
- $reports->child( Build => label => 'Build', url => '/report/'.$report->id.'/build');
- $reports->child( Show => label => 'Show', url => '/report/'.$report->id.'/show');
+ $reports->child( Build => label => 'Build', url => '/reports/'.$report->id.'/build');
+ $reports->child( Show => label => 'Show', url => '/reports/'.$report->id.'/show');
set( report => $report );
};
-on qr'/report/(\d+)/(build|show)' => run { show 'report/'.$2; };
+on qr'/reports/(\d+)/(build|show)' => run { show 'reports/'.$2; };
# Change a password
on '/prefs' => run {
Modified: apps/spensive/lib/Spensive/Model/Email.pm
==============================================================================
--- apps/spensive/lib/Spensive/Model/Email.pm (original)
+++ apps/spensive/lib/Spensive/Model/Email.pm Tue Nov 20 12:12:52 2007
@@ -3,6 +3,7 @@
package Spensive::Model::Email;
use Jifty::DBI::Schema;
+use Jifty::RightsFrom column => 'expense';
use Spensive::Record schema {
column expense => references Spensive::Model::Expense;
Modified: apps/spensive/lib/Spensive/Model/EmailAttachment.pm
==============================================================================
--- apps/spensive/lib/Spensive/Model/EmailAttachment.pm (original)
+++ apps/spensive/lib/Spensive/Model/EmailAttachment.pm Tue Nov 20 12:12:52 2007
@@ -4,6 +4,8 @@
package Spensive::Model::EmailAttachment;
use Jifty::DBI::Schema;
+use Jifty::RightsFrom column => 'email';
+
use Spensive::Record schema {
column parent => references Spensive::Model::EmailAttachment;
column content_type => type is 'text';
@@ -19,9 +21,6 @@
my $args = shift;
my $mime_obj = delete $args->{'mime_obj'};
- warn "My PARENT IS " .$args->{parent};
-
- warn "Creating ". $mime_obj->content_type;
$args->{content_type} = $mime_obj->content_type;
$args->{filename} =$mime_obj->filename;
$args->{content} = $mime_obj->body;
Modified: apps/spensive/lib/Spensive/Model/ExpenseReport.pm
==============================================================================
--- apps/spensive/lib/Spensive/Model/ExpenseReport.pm (original)
+++ apps/spensive/lib/Spensive/Model/ExpenseReport.pm Tue Nov 20 12:12:52 2007
@@ -4,6 +4,8 @@
package Spensive::Model::ExpenseReport;
use Jifty::DBI::Schema;
+our $PWGEN = Text::Password::Pronounceable->new(6=>8);
+
use Spensive::Record schema {
column title => type is 'text';
column description => type is 'text', render as 'textarea';
@@ -25,7 +27,9 @@
}
sub categories { @{Spensive::Model::Expense->new()->column('category')->valid_values()} }
-our $PWGEN = Text::Password::Pronounceable->new(6=>8);
+
+
+
sub before_create {
my $self = shift;
my $args = shift;
Modified: apps/spensive/lib/Spensive/Model/User.pm
==============================================================================
--- apps/spensive/lib/Spensive/Model/User.pm (original)
+++ apps/spensive/lib/Spensive/Model/User.pm Tue Nov 20 12:12:52 2007
@@ -30,6 +30,21 @@
# Your model-specific methods go here.
-sub current_user_can {1}
+sub current_user_can {
+ my $self = shift;
+ my $action = shift;
+ if ($self->current_user->id == $self->id) {
+ if ($action eq 'read') {
+ return 1;
+ }
+ elsif ($action eq 'update') {
+ warn "Asked to update ".Join(',', at _);
+ }
+
+ }
+
+
+ return ($self->SUPER::current_user_can($action, @_));
+}
1;
Modified: apps/spensive/lib/Spensive/View.pm
==============================================================================
--- apps/spensive/lib/Spensive/View.pm (original)
+++ apps/spensive/lib/Spensive/View.pm Tue Nov 20 12:12:52 2007
@@ -14,26 +14,14 @@
h3 { _('Unsubmitted expenses') };
form {
my $search = Spensive::Model::ExpenseCollection->new();
- $search->limit(
- column => 'expense_report',
- value => 'null',
- operator => 'is',
- quote_value => 0
- );
- $search->limit(
- column => 'incurred_by',
- value => Jifty->web->current_user->id
- );
+ $search->limit( column => 'expense_report', value => 'null', operator => 'is', quote_value => 0);
+ $search->limit( column => 'incurred_by', value => Jifty->web->current_user->id);
set( search_collection => $search );
- render_region(
- name => 'expenses',
- path => '/expenses/list',
- defaults => { page => 1, id => 'xxx' }
+ render_region( name => 'expenses', path => '/expenses/list', defaults => { page => 1, id => 'xxx' }
);
};
- span {
- { class is 'hint' };
+ span { { class is 'hint' };
hyperlink( label => 'All my expenses...', path => '/expenses/all' );
};
};
@@ -43,10 +31,7 @@
h3 { _('Open expense reports') };
form {
my $search = Spensive::Model::ExpenseReportCollection->new();
- $search->limit(
- column => 'submitted_by',
- value => Jifty->web->current_user->id
- );
+ $search->limit( column => 'submitted_by', value => Jifty->web->current_user->id);
set( search_collection => $search );
render_region(
name => 'reports',
@@ -55,8 +40,7 @@
);
};
- span {
- { class is 'hint' };
+ span { { class is 'hint' };
hyperlink(
label => 'All my expense reports...',
path => '/reports/all'
@@ -72,313 +56,12 @@
require Spensive::View::Prefs;
alias Spensive::View::Prefs under './prefs';
-
-use Jifty::Plugin::TabView::View;
-
-template 'report/show' => page {
- my $report = get('report');
- h1 { 'Expense Report: ' . $report->title };
-
- my %category_totals = ();
- my %category_items = ();
- my %appendices = ();
- my $expenses = $report->expenses();
- my ( $earliest, $latest );
- my $appendix_counter='A';
-
- map {
- $earliest = $_->date_incurred
- if ( !$earliest || $_->date_incurred < $earliest );
- $latest = $_->date_incurred
- if ( !$latest || $_->date_incurred > $latest )
-
- } @{ $expenses->items_array_ref };
-
- div {
- { id is 'report-date-range' };
- outs(_('%1 to %2', $earliest, $latest));
-
- };
- table {
- foreach my $cat ( $report->categories ) {
- my $expenses = $report->expenses( category => $cat );
- div {
- { class is 'expense-category' };
- row {
- th { {colspan is '3' };
- h2 {$cat};
- }
- }
- }
- my $expense;
- foreach $expense ( grep { $_->category eq $cat }
- @{ $expenses->items_array_ref } )
- {
- row {
- { class is 'expense-entry' };
- for (qw(date_incurred title cost)) {
- cell {
- { class is 'expense-' . $_ };
- $expense->$_();
- };
- };
- if ($expense->attachments->count) {
- $appendices{++$appendix_counter} = $expense;
- cell { 'For attachments, see appendix '.$appendix_counter};
- }
- };
- row {
- cell {
- { class is 'expense-description'; colspan is '3'; };
- $expense->description();
- };
- };
- $category_totals{$cat} += $expense->cost;
- push @{ $category_items{$cat} }, $expense;
- }
-
- if ( $category_items{$cat}->[0] ) {
-
- row { { class is 'subtotal' };
- th { { colspan is '3' };
- span { { class is 'label' }; _('Subtotal: '); };
- outs( $category_totals{$cat} );
- };
-
- };
- } else {
- row {
- cell {
- {
- { class is 'subtotal-empty' };
- outs("Nothing to report");
- }
- }
- }
- }
- }
- }
- div {
- h2 {'Totals'};
-
- { class is 'total' };
- span {
- { class is 'label' };
- _('Total');
- };
- outs( List::Util::sum( values %category_totals ) );
- };
-
- h1{ _('Attachments')};
-
- for('A'..$appendix_counter) {
-
- my $expense = $appendices{$_};
- next unless $expense;
- h2{_("Appendix %1",$_)};
- my $attaches= $expense->attachments;
- while (my $attach = $attaches->next) {
-
- with( item => $attach), show('/attachment/image');
- }
- }
-
-
-};
-
-template 'report/build' => page {
- my $self = shift;
- h1 { get('report')->title };
- div { { class is 'hint'};
- outs_raw(_('You can add new expenses to this expense report by emailing %1'. a{ {href is 'mailto:'.get('report')->published_address;} get('report')->published_address}));
- };
- render_region(
- name => 'reports',
- path => 'report_tabs',
- defaults => { report => get('report')->id }
- );
-
- outs_raw( Jifty->web->return( label => 'Done' ) );
-};
-
-template report_tabs => sub {
- my $self = shift;
- $self->render_tabs(
- 'reports',
- [qw(report)],
- { label => 'Attach expenses',
- path => '/attach_reports',
- defer => 1
- },
- { label => 'Remove expenses',
- path => '/remove_reports',
- defer => 1,
- },
- { label => 'Add expenses',
- path => '/add_report',
- defer => 1,
- }
- );
-
- # qw(/attach_reports_tab /remove_reports_tab ) );
-};
-
-
-template 'add_report' => sub {
- my $report_id = get('report');
- my $report = Spensive::Model::ExpenseReport->new();
- $report->load($report_id);
-
- h2 { _('Add a new expense'); };
- render_region(
- name => 'expense-new',
- path => 'report/new_expense',
- defaults => { report => $report->id }
- );
-
-
-};
-
-template 'attach_reports' => sub {
- my $report_id = get('report');
- my $report = Spensive::Model::ExpenseReport->new();
- $report->load($report_id);
- h2 { _('add some stuff') };
-
- my $untied = Spensive::Model::ExpenseCollection->new();
- $untied->limit(
- column => 'incurred_by',
- value => Jifty->web->current_user->id
-
- );
- $untied->limit(
- column => 'expense_report',
- operator => 'is',
- value => 'null',
- entryaggregator => 'or'
- );
- $untied->limit(
- column => 'expense_report',
- operator => '=',
- value => ''
- );
-
- h3 {'Open expenses'};
-
- while ( my $item = $untied->next ) {
- render_region(
- name => 'expense-' . $item->id,
- path => 'report/add_expense',
- defaults => { id => $item->id, report => $report->id }
- );
-
- }
-
-};
-template 'remove_reports' => sub {
- my $report_id = get('report');
- my $report = Spensive::Model::ExpenseReport->new();
- $report->load($report_id);
- h2 { _('remove some stuff') };
-
- my $untied = Spensive::Model::ExpenseCollection->new();
- $untied->limit(
- column => 'incurred_by',
- value => Jifty->web->current_user->id
- );
- $untied->limit(
- column => 'expense_report',
- operator => '=',
- value => $report->id
- );
- while ( my $item = $untied->next ) {
- render_region(
- name => 'expense-' . $item->id,
- path => 'report/remove_expense',
- defaults => { id => $item->id, report => $report->id }
- );
- }
-};
-
-template 'report/new_expense' => sub {
- my $report = get('report');
- my $action = Jifty->web->new_action(
- class => 'CreateExpense',
- arguments => { expense_report => $report, incurred_by => Jifty->web->current_user->id }
- );
- form {
- for (qw(title cost date_incurred description)) {
- render_param($action => $_);
- }
- for (qw(incurred_by expense_report)) {
- render_param($action => $_,
- render_as => 'Hidden');
- }
- outs_raw(
- $action->button(
- label => 'Add',
- onclick => [ { submit => $action, }, { refresh_self => 1 } ]
- )
- );
- }
-};
-
-template 'report/add_expense' => sub {
- my $report = get('report');
- my $item = Spensive::Model::Expense->new();
- $item->load( get 'id' );
- my $action
- = Jifty->web->new_action( class => 'UpdateExpense', record => $item,
- );
- h3 { $item->title, ' - ', $item->cost, " - ", };
- form {
- render_param(
- $action => 'expense_report',
- render_as => 'Hidden',
- default_value => $report
- );
- outs_raw(
- $action->button(
- label => 'Add',
- onclick => [
- { submit => $action, },
- { delete => Jifty->web->current_region }
- ]
- )
- );
- }
-};
-
-template 'report/remove_expense' => sub {
- my $report = get('report');
- my $item = Spensive::Model::Expense->new();
- $item->load( get 'id' );
- my $action
- = Jifty->web->new_action( class => 'UpdateExpense', record => $item,
- );
- h3 { $item->title, ' - ', $item->cost, " - ", };
- form {
- render_param(
- $action => 'expense_report',
- render_as => 'Hidden',
- default_value => undef
- );
- outs_raw(
- $action->button(
- label => 'Remove',
- onclick => [
- { submit => $action, },
- { delete => Jifty->web->current_region }
- ]
- )
- );
- }
-};
-
template 'attachment/image' => sub {
my $item = get('attachment');
+ if ($item) {
Jifty->handler->apache->content_type( $item->content_type );
outs_raw( $item->content );
+ }
};
Modified: apps/spensive/lib/Spensive/View/Expenses.pm
==============================================================================
--- apps/spensive/lib/Spensive/View/Expenses.pm (original)
+++ apps/spensive/lib/Spensive/View/Expenses.pm Tue Nov 20 12:12:52 2007
@@ -15,9 +15,20 @@
private template view_item_controls => sub {
my $self =shift;
- my $item=shift;
+ my $record=shift;
div { { class is 'controls'};
- tangent(url => '/expense/'.$item->id, label => 'Details');
+ tangent(url => '/expense/'.$record->id, label => 'Details');
+ if ( $record->current_user_can('update') ) {
+ hyperlink(
+ label => _("Edit"),
+ class => "editlink",
+ onclick => {
+ replace_with => $self->fragment_for('update'),
+ args => { id => $record->id }
+ },
+ );
+ }
+
};
};
Modified: apps/spensive/lib/Spensive/View/Reports.pm
==============================================================================
--- apps/spensive/lib/Spensive/View/Reports.pm (original)
+++ apps/spensive/lib/Spensive/View/Reports.pm Tue Nov 20 12:12:52 2007
@@ -11,7 +11,7 @@
private template view_item_controls => sub {
my $self =shift;
my $item=shift;
- tangent(url => '/report/'.$item->id."/build", label => 'Details');
+ tangent(url => '/reports/'.$item->id."/build", label => 'Details');
};
sub display_columns {
@@ -21,4 +21,307 @@
}
+
+use Jifty::Plugin::TabView::View;
+
+template 'show' => page {
+ my $report = get('report');
+ h1 { 'Expense Report: ' . $report->title };
+
+ my %category_totals = ();
+ my %category_items = ();
+ my %appendices = ();
+ my $expenses = $report->expenses();
+ my ( $earliest, $latest );
+ my $appendix_counter='A';
+ $appendix_counter--;
+ map {
+ $earliest = $_->date_incurred
+ if ( !$earliest || $_->date_incurred < $earliest );
+ $latest = $_->date_incurred
+ if ( !$latest || $_->date_incurred > $latest )
+
+ } @{ $expenses->items_array_ref };
+
+ div {
+ { id is 'report-date-range' };
+ outs(_('%1 to %2', $earliest, $latest));
+
+ };
+ table {
+ foreach my $cat ( $report->categories ) {
+ my $expenses = $report->expenses( category => $cat );
+ div {
+ { class is 'expense-category' };
+ row {
+ th { {colspan is '3' };
+ h2 {$cat};
+ }
+ }
+ }
+ my $expense;
+ foreach $expense ( grep { $_->category eq $cat }
+ @{ $expenses->items_array_ref } )
+ {
+ row {
+ { class is 'expense-entry' };
+ for (qw(date_incurred title cost)) {
+ cell {
+ { class is 'expense-' . $_ };
+ $expense->$_();
+ };
+ };
+ if ($expense->attachments->count) {
+ $appendices{++$appendix_counter} = $expense;
+ cell { 'For attachments, see appendix '.$appendix_counter};
+ }
+ };
+ row {
+ cell {
+ { class is 'expense-description'; colspan is '3'; };
+ $expense->description();
+ };
+ };
+ $category_totals{$cat} += $expense->cost;
+ push @{ $category_items{$cat} }, $expense;
+ }
+
+ if ( $category_items{$cat}->[0] ) {
+
+ row { { class is 'subtotal' };
+ th { { colspan is '3' };
+ span { { class is 'label' }; _('Subtotal: '); };
+ outs( $category_totals{$cat} );
+ };
+
+ };
+ } else {
+ row {
+ cell {
+ {
+ { class is 'subtotal-empty' };
+ outs("Nothing to report");
+ }
+ }
+ }
+ }
+ }
+ }
+ div {
+ h2 {'Totals'};
+
+ { class is 'total' };
+ span {
+ { class is 'label' };
+ _('Total');
+ };
+ outs( List::Util::sum( values %category_totals ) );
+ };
+
+ h1{ _('Attachments')};
+
+ for('A'..$appendix_counter) {
+
+ my $expense = $appendices{$_};
+ next unless $expense;
+ h2{_("Appendix %1",$_)};
+ my $attaches= $expense->attachments;
+ while (my $attach = $attaches->next) {
+
+ with( item => $attach), show('/attachment/image');
+ }
+ }
+
+
+};
+
+template 'build' => page {
+ my $self = shift;
+ h1 { get('report')->title };
+ div { { class is 'hint'};
+ outs_raw(_('You can add new expenses to this expense report by emailing %1'. a{ {href is 'mailto:'.get('report')->published_address;} get('report')->published_address}));
+ };
+ render_region(
+ name => 'reports',
+ path => '/reports/report_tabs',
+ defaults => { report => get('report')->id }
+ );
+
+ outs_raw( Jifty->web->return( label => 'Done' ) );
+};
+
+template report_tabs => sub {
+ my $self = shift;
+ $self->render_tabs(
+ 'reports',
+ [qw(report)],
+ { label => 'Attach expenses',
+ path => 'attach_reports',
+ defer => 1
+ },
+ { label => 'Remove expenses',
+ path => 'remove_reports',
+ defer => 1,
+ },
+ { label => 'Add expenses',
+ path => 'add_report',
+ defer => 1,
+ }
+ );
+
+ # qw(/attach_reports_tab /remove_reports_tab ) );
+};
+
+
+template 'add_report' => sub {
+ my $report_id = get('report');
+ my $report = Spensive::Model::ExpenseReport->new();
+ $report->load($report_id);
+
+ h2 { _('Add a new expense'); };
+ render_region(
+ name => 'expense-new',
+ path => 'new_expense',
+ defaults => { report => $report->id }
+ );
+
+
+};
+
+template 'attach_reports' => sub {
+ my $report_id = get('report');
+ my $report = Spensive::Model::ExpenseReport->new();
+ $report->load($report_id);
+ h2 { _('add some stuff') };
+
+ my $untied = Spensive::Model::ExpenseCollection->new();
+ $untied->limit(
+ column => 'incurred_by',
+ value => Jifty->web->current_user->id
+
+ );
+ $untied->limit(
+ column => 'expense_report',
+ operator => 'is',
+ value => 'null',
+ entryaggregator => 'or'
+ );
+ $untied->limit(
+ column => 'expense_report',
+ operator => '=',
+ value => ''
+ );
+
+ h3 {'Open expenses'};
+
+ while ( my $item = $untied->next ) {
+ render_region(
+ name => 'expense-' . $item->id,
+ path => '/reports/add_expense',
+ defaults => { id => $item->id, report => $report->id }
+ );
+
+ }
+
+};
+template 'remove_reports' => sub {
+ my $report_id = get('report');
+ my $report = Spensive::Model::ExpenseReport->new();
+ $report->load($report_id);
+ h2 { _('remove some stuff') };
+
+ my $untied = Spensive::Model::ExpenseCollection->new();
+ $untied->limit(
+ column => 'incurred_by',
+ value => Jifty->web->current_user->id
+ );
+ $untied->limit(
+ column => 'expense_report',
+ operator => '=',
+ value => $report->id
+ );
+ while ( my $item = $untied->next ) {
+ render_region(
+ name => 'expense-' . $item->id,
+ path => '/reports/remove_expense',
+ defaults => { id => $item->id, report => $report->id }
+ );
+ }
+};
+
+template 'new_expense' => sub {
+ my $report = get('report');
+ my $action = Jifty->web->new_action(
+ class => 'CreateExpense',
+ arguments => { expense_report => $report, incurred_by => Jifty->web->current_user->id }
+ );
+ form {
+ for (qw(title cost date_incurred description)) {
+ render_param($action => $_);
+ }
+ for (qw(incurred_by expense_report)) {
+ render_param($action => $_,
+ render_as => 'Hidden');
+ }
+ outs_raw(
+ $action->button(
+ label => 'Add',
+ onclick => [ { submit => $action, }, { refresh_self => 1 } ]
+ )
+ );
+ }
+};
+
+template 'add_expense' => sub {
+ my $report = get('report');
+ my $item = Spensive::Model::Expense->new();
+ $item->load( get 'id' );
+ my $action
+ = Jifty->web->new_action( class => 'UpdateExpense', record => $item,
+ );
+ h3 { $item->title, ' - ', $item->cost, " - ", };
+ form {
+ render_param(
+ $action => 'expense_report',
+ render_as => 'Hidden',
+ default_value => $report
+ );
+ outs_raw(
+ $action->button(
+ label => 'Add',
+ onclick => [
+ { submit => $action, },
+ { delete => Jifty->web->current_region }
+ ]
+ )
+ );
+ }
+};
+
+template 'remove_expense' => sub {
+ my $report = get('report');
+ my $item = Spensive::Model::Expense->new();
+ $item->load( get 'id' );
+ my $action
+ = Jifty->web->new_action( class => 'UpdateExpense', record => $item,
+ );
+ h3 { $item->title, ' - ', $item->cost, " - ", };
+ form {
+ render_param(
+ $action => 'expense_report',
+ render_as => 'Hidden',
+ default_value => undef
+ );
+ outs_raw(
+ $action->button(
+ label => 'Remove',
+ onclick => [
+ { submit => $action, },
+ { delete => Jifty->web->current_region }
+ ]
+ )
+ );
+
+ }
+};
1;
More information about the Jifty-commit
mailing list