a programmer is working to assist me, so cancel my request for help. let
me know if interested in seeing code when done
thanks,
Alex Glaros
On Wednesday, September 11, 2013 2:39:02 PM UTC-7, Alex Glaros wrote:
>
> I’d like help in building a universal address function for all countries.
> I’m hoping that it would prove useful to other programmers so it could be
> posted to Slices. The data model is finished, just need help with
> controller.
>
> BACKGROUND
>
> Different countries have different geo-political divisions, and the number
> of divisions differs, e.g., United States has 3: city, county, state,
> federal. Viet Nam has 4: district, ward, province, township.
> To handle this I've created a lookup table that abstracts and stacks
> geo-political subdivision types into virtual fields.
>
> MODELS
>
> db.define_table('GeoPoliticalDivision', ## E.g., US City, VN District
> Field('countryCode','reference Country'), ## E.g., US
> Field('geoPoliticalName','string')) ## E.g., City'
>
> Sample data
>
> United States of America US City
> United States of America US County
> United States of America US State
> Viet NamDistrict
>
> Then, table below takes the data from above table, and adds the specific
> information for a specific address.
>
> db.define_table('AddressGeoPoliticalDivision', ## This 1:M intersection
> table is child of Address table. Address table stores country name, postal
> code and first 3 lines of address like “street”. This table stores the
> different geoPolitical divisions. Example: Address #1, US city, Sacramento.
> Address #1, US county, Yolo. Address #1, US state, California.
> Field('addressID','reference Address'),
> Field('geoPoliticalDivisionID','reference GeoPoliticalDivision'), ## E.g.,
> VN city, or, US county.
> Field('geoPoliticalDivisionData','string')) ## this contains name of the
> division, e.g., “Chicago”
>
> Sample data
>
> 30 Humboldt Drive - US City - Arcata
> 30 Humboldt Drive - US County - Humboldt
> 30 Humboldt Drive - US State - California
>
> The above table is only part of a party’s address. It is a 1:M child of
> the Address table below
>
> db.define_table('Address',
> Field('addressLine_1','string'),
> Field('addressLine_2','string'),
> Field('addressLine_3','string'),
> Field('zipOrPostalCode','string'),
> Field('countryCode','string',label='Country'))
>
>
> Another table, db.PartyAddressIntersection, links an address to a party.
>
> To populate an address, the code has to loop through the virtual
> 'GeoPoliticalDivision' fields for that country to enable user to fill them
> out. That’s the part I need help with.
>
> CONTROLLER
>
> Here is a join that shows how db.AddressGeoPoliticalDivision works
>
> query = (db.Party.id == db.auth_user.partyID) &
> (db.PartyAddressIntersection.partyID==db.Party.id) &
> (db.PartyAddressIntersection.addressID==db.Address.id) &
> (db.PartyAddressIntersection.addressTypeID==db.AddressType.id) &
> (db.AddressGeoPoliticalDivision.addressID==db.Address.id)
>
> Here’s most of the code to add an address. What is missing is the code
> for how to loop through db.GeoPoliticalDivision for the correct country and
> populate db.AddressGeoPoliticalDivision fields.
>
> @auth.requires_login()
> def add_new_government_organization():
> db.ObjectSuperType.objectTypeID.default = 1 ## sets up db so object
> type is designated as a party (not a component)
> db.Party.partyTypeID.default = 2 ## sets up db so it's an organization
> (not a person)
> db.Organization.organizationPrimaryTypeID.default = 1 ## sets up
> Organization table so primary type is "Government"
> db.ObjectSuperType.objectTypeID.readable =
> db.ObjectSuperType.objectTypeID.writable = False ## don't let user see
> field thinking they have to fill it in
> ##db.Organization.termsAndConditions.readable =
> db.Organization.termsAndConditions.writable = False ##
> db.Party.objectID.readable = db.Party.objectID.writable = False ##
> don't let user see field thinking they have to fill it in
> db.Organization.partyID.readable = db.Organization.partyID.writable =
> False ## don't let user see field thinking they have to fill it in
> db.GovOrgJurisdiction.organizationID.readable =
> db.GovOrgJurisdiction.organizationID.writable = False
> db.Organization.organizationPrimaryTypeID.readable =
> db.Organization.organizationPrimaryTypeID.writable = False ## don't let
> user see field thinking they have to fill it in
> db.Party.partyTypeID.readable = db.Party.partyTypeID.writable = False
> ## don't let user see field thinking they have to fill it in
> db.PartyAddressIntersection.addressID.readable =
> db.PartyAddressIntersection.addressID.writable = False ## don't let user
> see field
> db.Address.id.readable = db.Address.id.writable = False ## don't let
> user see field
> form=SQLFORM.factory(db.ObjectSuperType,db.Party,db.Organization,
> db.PartyAddres