Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1382/listings management, application dates #1432

Merged
merged 10 commits into from
Jul 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ All notable changes to this project will be documented in this file. The format
- Fix units availability ([#1397](https://github.com/bloom-housing/bloom/issues/1397))

- Added:

- Added "closed" to ListingStatus enum
- Added Transform to ListingStatus field to return closed if applicationDueDate is in the past
- Added "ohaFormat" to CSV exporter (includes OHA and HOPWA preferences) ([#1292](https://github.com/bloom-housing/bloom/pull/1292)) (Michał Plebański)
Expand Down Expand Up @@ -69,6 +70,7 @@ All notable changes to this project will be documented in this file. The format
- Adds units to listings ([#1448](https://github.com/bloom-housing/bloom/pull/1448))
- Add Rankings and Results section to listing management ([#1433](https://github.com/bloom-housing/bloom/pull/1433)) (Emily Jablonski)
- Add Application Address section to listing management ([#1425](https://github.com/bloom-housing/bloom/pull/1425)) (Emily Jablonski)
- Add Application Dates section to listing management ([#1432](https://github.com/bloom-housing/bloom/pull/1432)) (Emily Jablonski)

- Fixed:

Expand Down
1 change: 1 addition & 0 deletions backend/core/archer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ export const ArcherListing: Listing = {
id: "Uvbk5qurpB2WI9V6WnNdH",
applicationConfig: undefined,
applicationOpenDate: new Date("2019-12-31T15:22:57.000-07:00"),
applicationDueTime: new Date(),
applicationPickUpAddress: undefined,
applicationPickUpAddressOfficeHours: "",
applicationDropOffAddress: null,
Expand Down
9 changes: 9 additions & 0 deletions backend/core/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1722,6 +1722,9 @@ export interface Listing {
/** */
applicationDueDate: Date

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date

Expand Down Expand Up @@ -1899,6 +1902,9 @@ export interface ListingCreate {
/** */
applicationDueDate: Date

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date

Expand Down Expand Up @@ -2094,6 +2100,9 @@ export interface ListingUpdate {
/** */
applicationDueDate: Date

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date

Expand Down
7 changes: 7 additions & 0 deletions backend/core/src/listings/entities/listing.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ class Listing extends BaseEntity {
@Type(() => Date)
applicationDueDate: Date | null

@Column({ type: "timestamptz", nullable: true })
@Expose()
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
@IsDate({ groups: [ValidationsGroupsEnum.default] })
@Type(() => Date)
applicationDueTime: Date | null

@Column({ type: "timestamptz", nullable: true })
@Expose()
@IsOptional({ groups: [ValidationsGroupsEnum.default] })
Expand Down
15 changes: 15 additions & 0 deletions backend/core/src/migration/1625094786618-application-due-time.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { MigrationInterface, QueryRunner } from "typeorm"

export class applicationDueTime1625094786618 implements MigrationInterface {
name = "applicationDueTime1625094786618"

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "listings" ADD "application_due_time" TIMESTAMP WITH TIME ZONE`
)
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "listings" DROP COLUMN "application_due_time"`)
}
}
3 changes: 3 additions & 0 deletions backend/core/src/seeds/listings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2410,6 +2410,7 @@ const defaultListing: ListingSeedType = {
applicationDropOffAddressOfficeHours: null,
applicationMailingAddress: null,
applicationDueDate: getDate(10),
applicationDueTime: null,
applicationFee: "20",
applicationOpenDate: getDate(-10),
applicationOrganization: "Application Organization",
Expand Down Expand Up @@ -2481,6 +2482,7 @@ const tritonListing: ListingSeedType = {
applicationDueDate: getDate(10),
applicationFee: "38.0",
applicationOpenDate: getDate(-10),
applicationDueTime: null,
applicationOrganization: "Triton",
applicationPickUpAddress: {
city: "Foster City",
Expand Down Expand Up @@ -2547,6 +2549,7 @@ const coliseumListing: ListingSeedType = {
applicationDropOffAddressOfficeHours: null,
applicationMailingAddress: null,
applicationDueDate: getDate(10),
applicationDueTime: null,
applicationFee: "12",
applicationOpenDate: getDate(-10),
applicationOrganization: "John Stewart Company",
Expand Down
9 changes: 9 additions & 0 deletions backend/core/types/src/backend-swagger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3273,6 +3273,9 @@ export interface Listing {
/** */
applicationDueDate: Date;

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date;

Expand Down Expand Up @@ -3567,6 +3570,9 @@ export interface ListingCreate {
/** */
applicationDueDate: Date;

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date;

Expand Down Expand Up @@ -3890,6 +3896,9 @@ export interface ListingUpdate {
/** */
applicationDueDate: Date;

/** */
applicationDueTime: Date

/** */
applicationOpenDate: Date;

Expand Down
4 changes: 2 additions & 2 deletions sites/partners/pages/listings/[id]/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import { ListingContext } from "../../../src/listings/ListingContext"
import DetailListingData from "../../../src/listings/PaperListingDetails/sections/DetailListingData"
import DetailListingIntro from "../../../src/listings/PaperListingDetails/sections/DetailListingIntro"
import DetailBuildingDetails from "../../../src/listings/PaperListingDetails/sections/DetailBuildingDetails"
import DetailApplication from "../../../src/listings/PaperListingDetails/sections/DetailApplication"
import DetailAdditionalDetails from "../../../src/listings/PaperListingDetails/sections/DetailAdditionalDetails"
import DetailAdditionalEligibility from "../../../src/listings/PaperListingDetails/sections/DetailAdditionalEligibility"
import DetailLeasingAgent from "../../../src/listings/PaperListingDetails/sections/DetailLeasingAgent"
Expand All @@ -31,6 +30,7 @@ import DetailUnitDrawer, {
import DetailBuildingFeatures from "../../../src/listings/PaperListingDetails/sections/DetailBuildingFeatures"
import DetailRankingsAndResults from "../../../src/listings/PaperListingDetails/sections/DetailRankingsAndResults"
import DetailApplicationAddress from "../../../src/listings/PaperListingDetails/sections/DetailApplicationAddress"
import DetailApplicationDates from "../../../src/listings/PaperListingDetails/sections/DetailApplicationDates"

export default function ApplicationsList() {
const router = useRouter()
Expand Down Expand Up @@ -113,7 +113,6 @@ export default function ApplicationsList() {
<DetailListingData />
<DetailListingIntro />
<DetailBuildingDetails />
<DetailApplication />
<DetailUnits setUnitDrawer={setUnitDrawer} />
<DetailAdditionalFees />
<DetailBuildingFeatures />
Expand All @@ -122,6 +121,7 @@ export default function ApplicationsList() {
<DetailRankingsAndResults />
<DetailLeasingAgent />
<DetailApplicationAddress />
<DetailApplicationDates />
</div>

<div className="md:w-3/12 pl-6">
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import React, { useContext } from "react"
import { t, GridSection, ViewItem, GridCell } from "@bloom-housing/ui-components"
import { ListingContext } from "../../ListingContext"
import moment from "moment"

const DetailApplicationDates = () => {
const listing = useContext(ListingContext)

return (
<GridSection
className="bg-primary-lighter"
title={t("listings.sections.applicationDatesTitle")}
grid={false}
inset
>
<GridSection columns={3}>
<GridCell>
<ViewItem label={t("listings.applicationDeadline")}>
{listing.applicationDueDate &&
moment(new Date(listing?.applicationDueDate)).utc().format("MM/DD/YYYY")}
</ViewItem>
</GridCell>
<GridCell>
<ViewItem label={t("listings.applicationDueTime")}>
{listing.applicationDueTime &&
moment(new Date(listing?.applicationDueTime)).format("hh:mm:ss A")}
</ViewItem>
</GridCell>
</GridSection>
</GridSection>
)
}

export default DetailApplicationDates
42 changes: 38 additions & 4 deletions sites/partners/src/listings/PaperListingForm/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
StatusBar,
AppearanceStyleType,
Button,
TimeFieldPeriod,
} from "@bloom-housing/ui-components"
import { useForm, FormProvider } from "react-hook-form"
import {
Expand All @@ -24,7 +25,6 @@ import { YesNoAnswer } from "../../applications/PaperApplicationForm/FormTypes"
import moment from "moment"

import Aside from "../Aside"
import FormListingData from "./sections/FormListingData"
import AdditionalDetails from "./sections/AdditionalDetails"
import AdditionalEligibility from "./sections/AdditionalEligibility"
import LeasingAgent from "./sections/LeasingAgent"
Expand All @@ -37,10 +37,20 @@ import ListingIntro from "./sections/ListingIntro"
import BuildingFeatures from "./sections/BuildingFeatures"
import RankingsAndResults from "./sections/RankingsAndResults"
import ApplicationAddress from "./sections/ApplicationAddress"
import ApplicationDates from "./sections/ApplicationDates"

export type FormListing = Listing & {
waitlistOpenQuestion?: YesNoAnswer
waitlistSizeQuestion?: YesNoAnswer
applicationDueDateField?: {
month: string
day: string
year: string
}
applicationDueTimeField?: {
hours: string
minutes: string
seconds: string
period: TimeFieldPeriod
}
whereApplicationsDroppedOff?: ListingApplicationAddressType
whereApplicationsPickedUp?: ListingApplicationAddressType
arePaperAppsMailedToAnotherAddress?: boolean
Expand All @@ -52,6 +62,8 @@ export type FormListing = Listing & {
day: string
year: string
}
waitlistOpenQuestion?: YesNoAnswer
waitlistSizeQuestion?: YesNoAnswer
}

export const addressTypes = {
Expand Down Expand Up @@ -82,6 +94,7 @@ const defaults: FormListing = {
updatedAt: undefined,
applicationAddress: defaultAddress,
applicationDueDate: new Date(),
applicationDueTime: null,
applicationFee: "0",
applicationMethods: [],
applicationOpenDate: new Date(moment().subtract(10).format()),
Expand Down Expand Up @@ -215,6 +228,23 @@ const ListingForm = ({ listing, editMode }: ListingFormProps) => {
const formatFormData = (data: FormListing) => {
const showWaitlistNumber =
data.waitlistOpenQuestion === YesNoAnswer.Yes && data.waitlistSizeQuestion === YesNoAnswer.Yes

const getDueTime = () => {
let dueTimeHours = parseInt(data.applicationDueTimeField.hours)
if (data.applicationDueTimeField.period === "am" && dueTimeHours === 12) {
dueTimeHours = 0
}
if (data.applicationDueTimeField.period === "pm" && dueTimeHours !== 12) {
dueTimeHours = dueTimeHours + 12
}
const dueTime = new Date()
dueTime.setHours(
dueTimeHours,
parseInt(data.applicationDueTimeField.minutes),
parseInt(data.applicationDueTimeField.seconds)
)
return dueTime
}
units.forEach((unit) => {
switch (unit.unitType) {
case "threeBdrm":
Expand Down Expand Up @@ -257,9 +287,13 @@ const ListingForm = ({ listing, editMode }: ListingFormProps) => {

return {
...data,
applicationDueTime: getDueTime(),
disableUnitsAccordion: stringToBoolean(data.disableUnitsAccordion),
units: units,
isWaitlistOpen: data.waitlistOpenQuestion === YesNoAnswer.Yes,
applicationDueDate: new Date(
`${data.applicationDueDateField.year}-${data.applicationDueDateField.month}-${data.applicationDueDateField.day}`
),
yearBuilt: data.yearBuilt ? Number(data.yearBuilt) : null,
waitlistCurrentSize:
data.waitlistCurrentSize && showWaitlistNumber ? Number(data.waitlistCurrentSize) : null,
Expand Down Expand Up @@ -379,7 +413,6 @@ const ListingForm = ({ listing, editMode }: ListingFormProps) => {
<div className="flex flex-row flex-wrap">
<div className="info-card md:w-9/12">
<ListingIntro />
<FormListingData />
<BuildingDetails />
<Units
units={units}
Expand All @@ -394,6 +427,7 @@ const ListingForm = ({ listing, editMode }: ListingFormProps) => {
<RankingsAndResults listing={listing} />
<LeasingAgent />
<ApplicationAddress listing={listing} />
<ApplicationDates listing={listing} />
</div>

<aside className="md:w-3/12 md:pl-6">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ const AdditionalDetails = () => {

return (
<div>
<GridSection grid={false} separator>
<span className="form-section__title">{t("listings.sections.additionalDetails")}</span>
<span className="form-section__description">
{t("listings.sections.additionalDetailsSubtitle")}
</span>
<GridSection
grid={false}
separator
title={t("listings.sections.additionalDetails")}
description={t("listings.sections.additionalDetailsSubtitle")}
>
<GridSection columns={2}>
<Textarea
label={t("listings.requiredDocuments")}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,12 @@ const AdditionalEligibility = () => {

return (
<div>
<GridSection grid={false} separator>
<span className="form-section__title">
{t("listings.sections.additionalEligibilityTitle")}
</span>
<span className="form-section__description">
{t("listings.sections.additionalEligibilitySubtext")}
</span>
<GridSection
grid={false}
separator
title={t("listings.sections.additionalEligibilityTitle")}
description={t("listings.sections.additionalEligibilitySubtext")}
>
<GridSection columns={2}>
<Textarea
label={t("listings.creditHistory")}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ const AdditionalFees = () => {

return (
<div>
<GridSection grid={false} separator>
<span className="form-section__title">{t("listings.sections.additionalFees")}</span>
<span className="form-section__description">
{t("listings.sections.additionalFeesSubtitle")}
</span>
<GridSection
grid={false}
separator
title={t("listings.sections.additionalFees")}
description={t("listings.sections.additionalFeesSubtitle")}
>
<GridSection columns={3}>
<Field
label={t("listings.applicationFee")}
Expand Down
Loading