The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
config {
    engine MP13;
    template_engine TT;
    Init Std {  }
    SQL SQLite {  }
    SQL Postgres {  }
    SQL MySQL {  }
    HttpdConf Gantry { gantry_conf 1; }
    Control Gantry { dbix 1; }
    Model GantryDBIxClass {  }
    SiteLook GantryDefault {  }
    Conf Gantry { instance phoneprov; }
}
app PhoneProv {
    config {
        dbconn `dbi:SQLite:dbname=app.db` => no_accessor;
        template_wrapper `genwrapper.tt` => no_accessor;
    }
    controller is base_controller {
        method do_main is base_links {
        }
        method site_links is links {
        }
    }
    table directory_info {
        field id {
            is int4, primary_key, auto;
        }
        field phone_num {
            is varchar;
            label `Phone Num`;
            html_form_type text;
            searchable 1;
            html_form_optional 0;
            accessor phone_num_acc;
        }
        field install_date {
            is date;
            label `Install Date`;
            html_form_type text;
            searchable 1;
            html_form_optional 0;
        }

        # This is the definition of our pseudo field, so we'll make use of the
        # pseudo_value statement.  Note that bigtop will put the pseudo_value
        # statement into a DBIx::Class '+select' hashref with the pseudo field
        # name as the alias in '+as', and the reason why it's defined as a ref
        # is because it's literal SQL.
        field days_until_install {
            is int4;
            pseudo_value `\q[me.install_date - to_date( to_char(now(), 'MM/DD/YYYY'), 'MM/DD/YYYY' ) AS days_until_install]`;
            label `Days Until Install`;
        }

        foreign_display `%phone_num, %install_date (%PON)`;
    }
    controller DirectoryInfo is AutoCRUD {
        controls_table directory_info;
        rel_location directory_info;
        text_description directory_info;
        page_link_label `Directory Info`;
        method do_main is main_listing {
            cols phone_num, install_date;

            # We want to use the 'days_until_install' pseudo column in our
            # do_main controller, so tell bigtop about it.
            pseudo_cols days_until_install;

            header_options Add;
            row_options Edit, Delete;
            title `Directory Info`;
        }
        method form is AutoCRUD_form {
            all_fields_but id;
            extra_keys
                legend => `$self->path_info =~ /edit/i ? 'Edit' : 'Add'`;
            form_name directory_info;
        }
    }
    table e911 {
        field id {
            is int4, primary_key, auto;
        }
        field phone_num {
            is varchar;
            label `Phone Num`;
            html_form_type text;
            searchable 1;
            html_form_optional 0;
            accessor phone_num_acc;
        }
        field install_date {
            is date;
            label `Install Date`;
            html_form_type text;
            searchable 1;
            html_form_optional 0;
        }

        # This is the definition of our pseudo field, so we'll make use of the
        # pseudo_value statement.  Note that bigtop will put the pseudo_value
        # statement into a DBIx::Class '+select' hashref with the pseudo field
        # name as the alias in '+as', and the reason why it's defined as a ref
        # is because it's literal SQL.
        field days_until_install {
            is int4;
            pseudo_value `\q[me.install_date - to_date( to_char(now(), 'MM/DD/YYYY'), 'MM/DD/YYYY' ) AS days_until_install]`;
            label `Days Until Install`;
        }

        foreign_display `%phone_num, %install_date (%PON)`;
    }
    controller E911 is AutoCRUD {
        controls_table e911;
        rel_location e911;
        text_description e911;
        page_link_label E911;
        method do_main is main_listing {
            # In this controller we want to see our pseudo column actually
            # displayed on the main listing, so we'll just include it in the
            # cols statement.  This is different from the directory_info
            # controller where we just wanted to use the pseudo column for
            # some control structures in the do_main method.
            cols phone_num, install_date, days_until_install;

            header_options Add;
            row_options Edit, Delete;
            title E911;
        }
        method form is AutoCRUD_form {
            all_fields_but id;
            extra_keys
                legend => `$self->path_info =~ /edit/i ? 'Edit' : 'Add'`;
            form_name e911;
        }
    }
}