Based on the sample snippet below what would be the right way to simply tally up the number of units (outside of the repeat function) with a certain number of bedrooms entered --- So basically- show how many "3 bedroom units" were entered into the repeat function + also show how many 3 bedroom units were marked to "need Reno" + show which utilities (if any) that the owner pays
Please keep in mind I'd also want to keep track if that is a 3 bedroom multifamily unit, or a 3 bedroom single family unit, based on the "singleormulti" variable
Also - lets say outside of the repeat function I would like to show/hide certain text based on whether or not something is added or not -- So have it show/not show "Number of 1 Bed Units:" based on whether or not I enter any "1 bedroom" units into the repeat function
Thank you!
PS -- Is there a way to get numbers gathered from a repeat function - to be recognized as "real numbers" so that it can be formatted with the thousands separator?
Different Types Of Units: {formtext: name=numberofunits}
{repeat: {=numberofunits}; locals=rents}
{formmenu: default=Multifamily; Single Family; name=singleormulti}
Number of: {formtext: name=amtofunits; cols=5},
Bedroom unit(s): {formtext: name=numbedrooms; cols=5}
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=amtneedsreno}{endif}
Utilities That Owner Pays: {formtoggle: name=Water; default=no}{endformtoggle}{formtoggle: name=Electric; default=no}{endformtoggle}{formtoggle: name=Gas; default=no}{endformtoggle}{endrepeat}
Number of 1 bed Units: ??
That Need Reno: ??
Utilities That Owner Pays: ??
Number of 2 bed Units: ??
That Need Reno: ??
Utilities That Owner Pays: ??
Number of 3 bed Units: ??
That Need Reno: ??
Utilities That Owner Pays: ??
Number of 3 Bed Single Family: ??
That Need Reno: ??
Utilities That Owner Pays: ??
Number of 4 Bed Single Family: ??
That Need Reno: ??
Utilities That Owner Pays: ??
This is a tricky problem to solve within the repeat function, but I tried to use ifelse statements in order to assign specific variables to specific unit types within the repeat function. This allows you to print the number of units, renovations, and utilities for each unit type. If you want to further customize which statements print, you could even wrap the printed text in if statements that ask whether that unit type is greater than zero. Let me know if this makes sense or if there is anything else I can help you with!
Different Types Of Units: {formtext: name=numberofunits}
{repeat: {=numberofunits}; locals=r}
{formmenu: default=Multifamily; Single Family; name=singleormulti}
{if: singleormulti = "Multifamily"; trim=right}
Number of Bedrooms:{formmenu: default=1; 2; 3; 4; name=bedrooms}{if: bedrooms = "1"; trim=right}
Number of Units: {formtext: name=MF1Units; cols=5; default=0},
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=MF1needsreno; default=0}{endif}
Utilities That Owner Pays: {formtoggle: name=MF1Water; default=no}{endformtoggle}{formtoggle: name=MF1Electric; default=no}{endformtoggle}{formtoggle: name=MF1Gas; default=no}{endformtoggle}
{elseif: bedrooms = "2"; trim=yes}
Number of units: {formtext: name=MF2units; cols=5},
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=MF2needsreno}{endif}
Utilities That Owner Pays: {formtoggle: name=MF2Water; default=no}{endformtoggle}{formtoggle: name=MF2Electric; default=no}{endformtoggle}{formtoggle: name=MF2Gas; default=no}{endformtoggle}
{endif: trim=left}
{elseif: singleormulti = "Single Family"; trim=yes}
Number of bedrooms: {formmenu: default=1; 2; 3; 4; name=bedrooms}{if: bedrooms = "1"; trim=right}
Number of units: {formtext: name=SF1units; cols=5; default=0},
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=SF1sreno}{endif}
Utilities That Owner Pays: {formtoggle: name=SF1Water; default=no}{endformtoggle}{formtoggle: name=SF1Electric; default=no}{endformtoggle}{formtoggle: name=SF1Gas; default=no}{endformtoggle}
{elseif: bedrooms = "2"; trim=yes}
Number of units: {formtext: name=SF2units; cols=5},
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=SF2needsreno}{endif}
Utilities That Owner Pays: {formtoggle: name=SF2Water; default=no}{endformtoggle}{formtoggle: name=SF2Electric; default=no}{endformtoggle}{formtoggle: name=SF2Gas; default=no}{endformtoggle}
{endif: trim=left}
{endif: trim=left}
{endrepeat}
Number of 1 bed Units: {=SF1units + MF1units}
That Need Reno: {=SF1needsreno + MF1needsreno}
Water, electric, and gas paid (respectively):
Number of 2 bed Units: {=SF2units + MF2units}
That Need Reno: {=SF2needsreno + MF2needsreno}
Water, electric, and gas paid (respectively):
Number of 2 Bed Single Family: {=SF2units}
That Need Reno: {=SF2needsreno}
Water, electric, and gas paid (respectively): {=SF2Water} - {=SF2Electric} - {=SF2Gas}
Number of 2 Bed Multi-Family: {=MF2units}
That Need Reno: {=MF2needsreno}
Water, electric, and gas paid (respectively): {=MF2Water} - {=MF2Electric} - {=MF2Gas}
You were on the right track with the locals=rents attribute on the {repeat} command. So here's one way to implement this using that which also is much simpler:
Different Types Of Units: {formtext: name=numberofunits}
{repeat: {=numberofunits}; locals=rents}
{formmenu: default=Multifamily; Single Family; name=singleormulti}
Number of: {formtext: name=amtofunits; cols=5},
Bedroom unit(s): {formtext: name=numbedrooms; cols=5}
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=amtneedsreno}{endif}
Utilities That Owner Pays: {formtoggle: name=Water; default=no}{endformtoggle}{formtoggle: name=Electric; default=no}{endformtoggle}{formtoggle: name=Gas; default=no}{endformtoggle}{endrepeat}
{repeat: for bed_count in seq(1, 3)}
Count of {=bed_count} bed units: {=count(filter(rents, rent -> rent["numbedrooms"] = bed_count))}
Count of {=bed_count} bed units that need reno: {=count(filter(rents, rent -> rent["numbedrooms"] = bed_count and rent["needsreno"] ="yes"))}
{endrepeat}
You can extend this snippet to other requirements, for example by checking for rent["singleormulti"] to determine if it's a single or multi family unit. Let me know if it works for you.
Hi Guarang - Thank you for putting that together! I had a chance to review this and the "count" would only go up to 1 if any number of that unit type were entered- so for example: If I add 3 3 bed units, then only 1 would show up for "Count of 3 bed units:"
Otherwise- I came up with the snippet below- with some help from another Snippet I created with Ashwin. It solves my main issues of wanting to be able to record whatever I enter into the repeat function into a DB table
Different Types Of Units: {formtext: name=numberofunits}
{repeat: {=numberofunits}; locals=rents}
{formmenu: default=Multifamily; Single Family; name=singleormulti}
Number of: {formtext: name=amtofunits; cols=5},
Bedroom unit(s): {formtext: name=numbedrooms; cols=5}
Needs Renovation?: {formmenu: default=; Yes; name=needsreno}{if: needsreno="Yes"}
How Many Units Need Reno?: {formtext: name=amtneedsreno}{endif}
Utilities That Owner Pays: {formtoggle: name=Water; default=no}{endformtoggle}{formtoggle: name=Electric; default=no}{endformtoggle}{formtoggle: name=Gas; default=no}{endformtoggle}{endrepeat}
{`Single Or Multi`=join(map(rents, (property) -> property["singleormulti"]) , "//")}
{=`single or multi`}
{`Amount Of Units Separated`=join(map(rents, (property) -> property["amtofunits"]) , "//")}
Amount Of Units: {=`amount of units separated`}
{`Bedrooms Separated`=join(map(rents, (property) -> property["numbedrooms"]) , "//")}
Number of Bedrooms: {=`bedrooms separated`}
{`Amount Of Units Need Reno`=join(map(rents, (property) -> property["amtneedsreno"]) , " // ")}
Amount of Units That Need Reno: {=`amount of units need reno`}
{`Water Separated`=join(map(rents, (property) -> property["water"]) , "//")}
Water For Unit?: {=`water separated`}
{`Electric Separated`=join(map(rents, (property) -> property["electric"]) , "//")}
Electric For Unit?: {=`electric separated`}
{`Gas Separated`=join(map(rents, (property) -> property["gas"]) , "//")}
Gas For Unit?: {=`gas separated`}