diff --git a/app/resources/locales/en_US/field.po b/app/resources/locales/en_US/field.po index e782eba9c..f26b666db 100644 --- a/app/resources/locales/en_US/field.po +++ b/app/resources/locales/en_US/field.po @@ -116,6 +116,9 @@ msgstr "Ends at ({0})" msgid "enrollee_email" msgstr "Enrollee Email" +msgid "enrollee_identifier" +msgstr "Enrollee Identifier" + msgid "extension" msgstr "Extension" @@ -185,6 +188,9 @@ msgstr "Middle" msgid "modifiable" msgstr "Modifiable" +msgid "modified" +msgstr "Modified" + msgid "name" msgstr "Name" diff --git a/app/resources/locales/en_US/information.po b/app/resources/locales/en_US/information.po index b13dfec6d..87ca65138 100644 --- a/app/resources/locales/en_US/information.po +++ b/app/resources/locales/en_US/information.po @@ -54,6 +54,9 @@ msgstr "not set" msgid "pagination.format" msgstr "Page {{page}} of {{pages}}, Viewing {{start}}-{{end}} of {{count}}" +msgid "enrollment.steps" +msgstr "Enrollment Steps" + msgid "ExternalIdentities.source" msgstr "This External Identity was created from {0}." @@ -105,6 +108,12 @@ msgstr "Additional History Records may be available via Petitions and Provisioni msgid "pagination.format" msgstr "Page {{page}} of {{pages}}, Viewing {{start}}-{{end}} of {{count}}" +msgid "petition.history" +msgstr "Petition History" + +msgid "petition.information" +msgstr "Petition Information" + msgid "Petitions.pending" msgstr "This Petition has now been assigned to someone else. There is no further action for you at this time." diff --git a/app/resources/locales/en_US/operation.po b/app/resources/locales/en_US/operation.po index 7475df4ca..f28b3fd72 100644 --- a/app/resources/locales/en_US/operation.po +++ b/app/resources/locales/en_US/operation.po @@ -288,6 +288,9 @@ msgstr "View {0}" msgid "view.PersonRoles.a" msgstr "View Role {0}" +msgid "view.Petitions.a" +msgstr "View Petition {0}" + msgid "view.ExternalIdentityRoles.a" msgstr "View Role {0}" diff --git a/app/src/Lib/Util/StringUtilities.php b/app/src/Lib/Util/StringUtilities.php index d1d5e644c..d25ba6336 100644 --- a/app/src/Lib/Util/StringUtilities.php +++ b/app/src/Lib/Util/StringUtilities.php @@ -201,7 +201,10 @@ public static function entityAndActionToTitle($entity, $field = $linkTable->getDisplayField(); if(!empty($entity->$field)) { - $title = __d($domain, $msgId, $entity->$field); + $title = __d($domain, $msgIdOverride, $entity->$field); + if($msgIdOverride === $title) { + $title = __d($domain, $msgId, $entity->$field); + } } else { $title = __d($domain, $msgId, __d('controller', $modelsName, [1])); } diff --git a/app/src/Model/Table/PetitionsTable.php b/app/src/Model/Table/PetitionsTable.php index 8aa38d24c..9c6352c42 100644 --- a/app/src/Model/Table/PetitionsTable.php +++ b/app/src/Model/Table/PetitionsTable.php @@ -110,7 +110,8 @@ public function initialize(array $config): void { 'EnrollmentFlows' => ['EnrollmentFlowSteps' => ['sort' => ['ordr' => 'ASC']]], 'EnrolleePeople' => ['PrimaryName' => ['foreignKey' => 'person_id']], 'PetitionerPeople' => ['PrimaryName' => ['foreignKey' => 'person_id']], - 'PetitionStepResults' + 'PetitionStepResults', + 'PetitionHistoryRecords' ]); $this->setAutoViewVars([ diff --git a/app/templates/EnrollmentFlows/fields-nav.inc b/app/templates/EnrollmentFlows/fields-nav.inc index 2beb1446c..7e551480d 100644 --- a/app/templates/EnrollmentFlows/fields-nav.inc +++ b/app/templates/EnrollmentFlows/fields-nav.inc @@ -26,7 +26,7 @@ */ $topLinks[] = [ - 'icon' => 'start', + 'icon' => 'play_arrow', 'order' => 'Default', 'label' => __d('operation', 'EnrollmentFlows.start'), 'link' => [ diff --git a/app/templates/Petitions/columns.inc b/app/templates/Petitions/columns.inc index 1cfed9ffc..57c4f432d 100644 --- a/app/templates/Petitions/columns.inc +++ b/app/templates/Petitions/columns.inc @@ -86,8 +86,8 @@ $rowActions = [ 'controller' => 'petitions', 'action' => 'resume', 'class' => '', -// XXX this icon is supposed to be "resume" but that doesn't appear to render - 'icon' => 'start', +// XXX this icon can be "resume" if we switch to Material Symbols - see: CFM-404 + 'icon' => 'fast_forward', 'label' => __d('operation', 'resume'), 'if' => 'isResumable' ] diff --git a/app/templates/Petitions/fields-nav.inc b/app/templates/Petitions/fields-nav.inc new file mode 100644 index 000000000..c0964d730 --- /dev/null +++ b/app/templates/Petitions/fields-nav.inc @@ -0,0 +1,38 @@ + 'fast_forward', + 'order' => 'Default', + 'label' => __d('operation', 'resume'), + 'link' => [ + 'action' => 'resume', + $vv_obj->id + ] + ] +]; diff --git a/app/templates/Petitions/fields.inc b/app/templates/Petitions/fields.inc index ca8e86b35..1665c1682 100644 --- a/app/templates/Petitions/fields.inc +++ b/app/templates/Petitions/fields.inc @@ -28,6 +28,7 @@ declare(strict_types = 1); use \Cake\Utility\Hash; +use Cake\Utility\Inflector; // Petitions are read-only, though they can link to other actions if ($vv_action !== 'view') { @@ -35,38 +36,137 @@ if ($vv_action !== 'view') { } // Start with the petition metadata -print $this->element('form/listItem', [ - 'arguments' => [ - 'fieldName' => 'status', - ] -]); - -// Enrollee Email, if provided -print $this->element('form/listItem', [ - 'arguments' => [ - 'fieldName' => 'enrollee_email', - ] -]); +$statusTitle = __d('enumeration','PetitionStatusEnum.' . $vv_obj->status); +$statusCssClass = 'petition-status-title petition-status-title-' . Inflector::dasherize($statusTitle); +?> -// Enrollee -if (!empty($vv_obj?->enrollee_person?->id)) { - $enrolleeStatus = $vv_obj->enrollee_person->primary_name->full_name ?? __d('field', 'Petitions.enrollee.new'); - $enrolleeLink = [ - 'url' => [ - 'controller' => 'people', - 'action' => 'edit', - $vv_obj->enrollee_person_id - ] - ]; - print $this->element('form/listItem', [ - 'arguments' => [ - 'fieldName' => 'enrollee_person_id', - 'status' => $enrolleeStatus, - 'link' => !empty($vv_obj->enrollee_person->id) ? $enrolleeLink : [], - ] - ]); -} +
  • +

    + +

    +
  • +
  • +

    + +

    +
  • +enrollee_person?->id)): ?> +
  • +
    +
    +
    +
    + + : + + + Html->link( + $vv_obj->enrollee_person->primary_name->full_name ?? __d('field', 'Petitions.enrollee.new'), + [ + 'controller' => 'people', + 'action' => 'edit', + $vv_obj->enrollee_person_id + ] + ); + ?> + +
    +
    +
    +
    + enrollee_email)): ?> +
    + + : + + + Html->link( + $vv_obj->enrollee_email, + 'mailto:' . $vv_obj->enrollee_email, + ['class' => 'nospin'] + ); + ?> + +
    + + enrollee_identifier)): ?> +
    + + : + + + enrollee_identifier ?> + +
    + +
    +
    +
  • + +
    +
    +
    + +
    +
    +
    + Html->link( + $vv_obj->enrollee_person->primary_name->full_name ?? __d('field', 'Petitions.enrollee.new'), + [ + 'controller' => 'people', + 'action' => 'edit', + $vv_obj->enrollee_person_id + ] + ); + ?> +
    +
    + + enrollee_email)): ?> +
  • +
    +
    +
    + +
    +
    +
    + Html->link( + $vv_obj->enrollee_email, + 'mailto:' . $vv_obj->enrollee_email, + ['class' => 'nospin'] + ); + ?> +
    +
    +
  • + + enrollee_identifier)): ?> +
  • +
    +
    +
    + +
    +
    +
    + enrollee_identifier ?> +
    +
    +
  • + + */ ?> + +petitioner_person?->id)) { $petitionerStatus = $vv_obj?->petitioner_person?->primary_name?->full_name ?? ''; @@ -85,31 +185,114 @@ if (!empty($vv_obj?->petitioner_person?->id)) { ] ]); } - ?> +
  • + +
    +
    +
    + +
    +
    +
    + Html->link( + $vv_obj->enrollment_flow->name, + [ + 'controller' => 'enrollment_flows', + 'action' => 'edit', + $vv_obj->enrollment_flow->id + ] + ) + ?> +
    +
    +
  • +
  • + +
    +
    +
    + : created ?> +
    +
    +
    + : modified ?> +
    +
    +
  • + +
  • +

    + +

    +
  • + + -
      - enrollment_flow->enrollment_flow_steps as $step): ?> - petition_step_results, "{n}[enrollment_flow_step_id=$step->id]"); +enrollment_flow->enrollment_flow_steps as $step): ?> + petition_step_results, "{n}[enrollment_flow_step_id=$step->id]"); - if(!empty($result)) { - $resultLink = [ - 'controller' => 'petitions', - 'action' => 'result', - $vv_obj->id, - '?' => [ - 'enrollment_flow_step_id' => $step->id - ] - ]; - } - ?> + if(!empty($result)) { + $resultLink = [ + 'controller' => 'petitions', + 'action' => 'result', + $vv_obj->id, + '?' => [ + 'enrollment_flow_step_id' => $step->id + ] + ]; + } + ?> -
    1. description ?>
    2. - - - -
    +
  • +
    +
    +
    + description ?> +
    +
    +
    + Html->link($result[0]->comment, $resultLink) : "" ?> +
    +
    +
  • + + + +petition_history_records)): + // XXX Generalize this into an element for all history records if we use this output elsewhere +?> +
  • +

    + +

    +
  • +
  • +
    + + + + + + + + + + + + petition_history_records as $hr): ?> + + + + + + + + +
    +
    +
  • + diff --git a/app/webroot/css/co-base.css b/app/webroot/css/co-base.css index 3521f9c2d..624bd6659 100644 --- a/app/webroot/css/co-base.css +++ b/app/webroot/css/co-base.css @@ -29,7 +29,7 @@ @import url("fonts/material-icons/material-icons.css"); html * { - font-family: 'open_sansregular','Trebuchet MS',Arial,Helvetica,sans-serif; + font-family: var(--cmg-font-regular); } body { color: var(--cmg-color-body-txt); @@ -1354,21 +1354,30 @@ field data is in the right column; see also ul.data-list above. ***/ ul.form-list { clear: both; + margin-top: 0.5rem; padding: 0; -} -body.view ul.form-list { - border-bottom: 1px solid var(--cmg-color-bg-005); + border-top: 1px solid var(--cmg-color-bg-005); } .cm-time-picker-vals ul li, ul.form-list li { background-color: var(--cmg-color-body-bg); border-left: 1px solid var(--cmg-color-bg-005); - border-top: 1px solid var(--cmg-color-bg-005); + border-bottom: 1px solid var(--cmg-color-bg-005); border-right: 1px solid var(--cmg-color-bg-005); margin: 0; padding: 0; list-style: none; } +ul.fields li.form-list-header { + overflow-x: unset; + margin-top: 2rem; +} +ul.fields li.form-list-header h2 { + color: var(--cmg-color-txt-inverse); + background-color: var(--cmg-color-btn-bg-001); + font-size: 1.4em; + padding: 1rem; +} ul.form-list li:focus-within { background-color: var(--cmg-color-bg-001); } @@ -1387,8 +1396,7 @@ ul.form-list li .field:hover { } ul.form-list li.fields-submit { background-color: unset; - border-left: none; - border-right: none; + border: none; } ul.form-list li.fields-submit .field:hover { background-color: var(--cmg-color-body-bg); @@ -1884,6 +1892,38 @@ body.attributecollectors .submit { padding-right: 1em; white-space: nowrap; } +ul#view_Petitions.form-list { + border-top: none; +} +ul.form-list li.petition-status-title { + margin-top: 0.5rem; + margin-bottom: -1rem; + border: none; +} +ul.form-list li.petition-status-title h2 { + /* default colors for most status titles */ + background-color: var(--cmg-color-highlight-009); + color: var(--cmg-color-highlight-010); + border: 1px solid var(--cmg-color-highlight-011); +} +ul.form-list li.petition-status-title-finalized h2 { + background-color: var(--cmg-color-highlight-006); + color: var(--cmg-color-highlight-007); + border: 1px solid var(--cmg-color-highlight-008); +} +ul.form-list li.petition-enrollee-items, +ul.form-list li.petition-enrollee-items .field:hover { + background-color: var(--cmg-color-highlight-004); + color: var(--cmg-color-highlight-005); +} +ul.form-list li.petition-enrollee-items .field-info { + display: flex; + flex-direction: column; /* changes to 'row' on desktop */ +} +ul.form-list li.petition-enrollee-items .petition-inline-value, +ul.form-list li.petition-enrollee-items .petition-inline-value a { + font-family: var(--cmg-font-semibold); +} /* GENERAL */ .hidden, .invisible, @@ -2091,6 +2131,9 @@ table.table-striped tbody tr:nth-child(2n) td { td .alert { margin-bottom: 0; } +.history-table th { + font-weight: normal; +} /* LOADING ANIMATION & SKELETONS */ @keyframes loading { 0% { opacity: 0.3; } diff --git a/app/webroot/css/co-color.css b/app/webroot/css/co-color.css index c9b6524dd..333727517 100644 --- a/app/webroot/css/co-color.css +++ b/app/webroot/css/co-color.css @@ -90,6 +90,10 @@ --cmg-color-highlight-017: #cee6f8; /* alert: info border color (blue) */ --cmg-color-highlight-018: yellow; /* autocomplete highlight for query text */ + /* Fonts */ + --cmg-font-regular: 'open_sansregular','Trebuchet MS',Arial,Helvetica,sans-serif; + --cmg-font-semibold: 'open_sanssemibold','open_sansregular','Trebuchet MS',Arial,Helvetica,sans-serif; + /* Duet Date Picker Colors & Settings */ --duet-color-primary: var(--cmg-color-btn-bg-001); --duet-color-text: var(--cmg-color-body-txt); diff --git a/app/webroot/css/co-responsive.css b/app/webroot/css/co-responsive.css index 88f567a3f..c8a0c16d7 100644 --- a/app/webroot/css/co-responsive.css +++ b/app/webroot/css/co-responsive.css @@ -504,6 +504,11 @@ #dispatch_AttributeCollectors .fields-telephoneNumber .fieldset-info .fieldset-field.fields-number input { width: 24em; } + /* PETITIONS */ + ul.form-list li.petition-enrollee-items .field-info { + flex-direction: row; + gap: 3em; + } /* FOOTER */ #co-footer { position: static; diff --git a/app/webroot/css/fonts/opensans/OpenSans-Semibold-webfont.woff b/app/webroot/css/fonts/opensans/OpenSans-Semibold-webfont.woff new file mode 100644 index 000000000..c5c64ed59 Binary files /dev/null and b/app/webroot/css/fonts/opensans/OpenSans-Semibold-webfont.woff differ diff --git a/app/webroot/css/fonts/opensans/stylesheet.css b/app/webroot/css/fonts/opensans/stylesheet.css index 07f6cc63d..bb2af9471 100644 --- a/app/webroot/css/fonts/opensans/stylesheet.css +++ b/app/webroot/css/fonts/opensans/stylesheet.css @@ -8,3 +8,9 @@ font-weight: normal; font-style: normal; } +@font-face { + font-family: 'open_sanssemibold'; + src: url('OpenSans-Semibold-webfont.woff') format('woff'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file