How to Distinguish A Certain Variable that is part of a Repeat Function

Hi TB Community,

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!

{note: preview=no}{formtext: name=SF1units; default=0}{formtext: name=SF2units; default=0}{formtext: name=MF1units; default=0}
{formtext: name=MF2units; default=0}{formtext: name=MF1needsreno; default=0}{formtext: name=MF2needsreno; default=0}{formtext: name=SF1needsreno; default=0}{formtext: name=SF2needsreno; default=0}{formtoggle: name=MF1Water; default=no}{endformtoggle}{formtoggle: name=MF1Electric; default=no}{endformtoggle}{formtoggle: name=MF1Gas; default=no}{endformtoggle}{formtoggle: name=SF1Water; default=no}{endformtoggle}{formtoggle: name=SF1Electric; default=no}{endformtoggle}{formtoggle: name=SF1Gas; default=no}{endformtoggle}{formtoggle: name=MF2Water; default=no}{endformtoggle}{formtoggle: name=MF2Electric; default=no}{endformtoggle}{formtoggle: name=MF2Gas; default=no}{endformtoggle}{formtoggle: name=SF2Water; default=no}{endformtoggle}{formtoggle: name=SF2Electric; default=no}{endformtoggle}{formtoggle: name=SF2Gas; default=no}{endformtoggle}{endnote}

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}

1 Like

Forgot to mention, but I had to initialize the variables outside of the repeat function in a note

1 Like

Thank you Alex! I had no idea you could reference variables within a repeat normally if you initialize them first. This helps a ton

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.

1 Like

Perfect Thank you Gaurang!! I will check it out shortly

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`}

1 Like