4/10 Done: we'll do the quick hack.
4/10 Done: Unless we discover a requirement we don't know about yet, we'll do the quick hack. There might be something about permissions that will push us into a more robust implementation, don't know yet.
Raphael's map:
Old mockups, just food for thought, Laura/Evan haven't seen these afaik:
Discussion needed. Brainstorming:
Starting with the map, which will be the default page. Display all nodes which have a location.
When something is clicked on the map, where does the info appear? A pane on the right? A popup? Both (just a brief rollover on the map)?
Should there be a "permanent" pane on the right? Starting maybe with a list of agents by role?
Or something even more dashboardy?
Then, for other features (right now just configuration), what would be the preferred setup? Tabs for sections? More tabs vs less and sub-choices? Hamburger menu? Note there will be a lot of features eventually.
Question: What have we got now for relating Agents with the holochain pubkey ("holochain agent")? And do we have a way for more than one holochain agent to have permissions for one organization? Or even for one holochain agent to have permissions for one organization? (Check the doc.)
We should be OK with what is there now. They said that all nodes are organizations, so we can hack Organization.classifiedAs for role in the network if no objections. It can be just a string (or is that validated for URLs?)
Create a list of agents, can be just names.
Add agent popup/modal or separate pane (?) with:
- Logo (Agent.image)
- Name (Agent.name)
- Display information (Agent.note, will include formatted contact info, will end of lines work?)
- Role (use Organization.classifiedAs)
- Location (Agent.primaryLocation, for now just text: lat, long - specify the exact format expected)
- later when we have facets: facets/facet values for the agent
Sample from REA Playspace, just informational, or maybe there is some code that could be re-used.
Add Role as a filter for the Agents on the map. Also add facet/facet values as filters. (? double check all of this)
Add Agent display for when an agent is clicked. Include: image, name, contact info (in notes), facets with facet values designated for them. Leave room for adding offers later.
Faceted classification will be used for both Agents and ResourceSpecifications. This will be all user defined. Approximate examples:
This needs to be added to hREA, noting that ResourceSpecification and Agent exist. (Discussion welcome to improve this model!)
Facet.categorizes is there to designate "Agent" or "ResourceSpecification". If you would rather have separate sets of Facets/FacetValues for each instead, I'll change it. Maybe the current modularization would indicate that?
We'll need to decide how this fits into the zome/DNA scheme, as well as the graphql scheme. I don't see putting it into VF until we try it out here, if that is OK.
This is just the Facets and FacetValues within each Facet. This is done mostly just at the beginning of the network, so we don't need anything fancy. We could even consider just loading CFN data in to save time, using graphiql. That would make sense to me.
Agent: Add to the Agent CRUD form a way to pick zero or one FacetValue for each Facet, store the data.
ResourceSpecification: Include it when we get to that, which will be needed for offers.
Both Agent and ResourceSpecification facet values will be useful filters, once offers are done. Start with just Agent. Let's get some direction from the users on this.
Should be all there. We'll need to load in some units (there won't be very many).
Create a list of resource specs, can be just names.
Add agent popup/modal or separate pane (?) with:
- Name (ResourceSpecification.name)
- Image (ResourceSpecification.image)
- Default Unit of Resource (ResourceSpecification.defaultUnitOfResource)
- Default Unit of Effort (ResourceSpecification.defaultUnitOfEffort)
- Description (ResourceSpecification.note)
- later when we have facets: facets/facet values for the ResourceSpecification
(I don't think we need ResourceSpecification.resourceClassifiedAs.)
Sample from REA Playspace, just informational, or maybe there is some code that could be re-used.
For now, this will be pretty much offers from the farmers, but eventually could include all roles. When possible, they will want a page where the farmers (and other eventually) can enter their own agent information, and their own offers to the network.
This includes Proposal, ProposedIntent, Intent (one Intent for what is offered, one for the price). I think it is all there already?
As noted above, we'll have to load in a few Units.
On the screen:
Proposal.hasBeginning (date available, default to today)
(main Intent, ProposedIntent.reciprocal=false)
Intent.resourceConformsTo (ResourceSpecification.name, plus all the FacetValues for the ResourceSpecification filter by … TBD, set up a facet)
Intent.resourceQuantity (Measure.hasNumericalValue + Measure.hasUnit)
Intent.availableQuantity (Measure.hasNumericalValue + Measure.hasUnit)
Intent.note
Intent.image
(reciprocal Intent, ProposedIntent.reciprocal=true)
Intent.resourceQuantity (Measure.hasNumericalValue)
Intent.resourceConformsTo (ResourceSpecification.name, dropdown filtered by… TBD, set up a facetValue for currencies)
Fields saved:
Proposal.hasBeginning (screen, default date created)
Proposal.hasEnd (screen, if no longer available checked, save current date)
Proposal.inScopeOf (the network agent)
Proposal.unitBased = true
Proposal.created (current date when created)
(main Intent)
Intent.resourceQuantity (screen, unit="one")
Intent.availableQuantity (screen)
Intent.resourceConformsTo (screen)
Intent.image (screen)
Intent.inScopeOf (the network agent)
Intent.finished (false until no longer available is checked, then true)
Intent.note (screen description)
Intent.action (always "transfer"??? might also be "deliverService"; maybe even "work", others???)
Intent.provider (the offering agent)
ProposedIntent.publishedIn (the proposal)
ProposedIntent.publishes (the Intent)
ProposedIntent.reciprocal = false
(reciprocal Intent, the "price")
Intent.resourceQuantity (screen numeric value, unit = "one")
Intent.resourceConformsTo (screen)
Intent.inScopeOf (the network agent)
Intent.finished (false until no longer available is checked, then true)
Intent.action (always "transfer")
Intent.receiver (the offering agent)
ProposedIntent.publishedIn (the proposal)
ProposedIntent.publishes (the Intent)
ProposedIntent.reciprocal = true