Ok, thanks a lot for those important clarification.
I will create a new JIRA issue and a patch for it as soon as I can.
Antoher small question :

did you think that it's better to have a PayflowPro entity or put a prefix 
before it (ex. PaymentGatewayPayflowPro, PaymentGatewayCyberSource, ...) ?
So all the paymentGateway are grouped all together or we can simply use a 
specific package name for it (org.ofbiz.accounting.payment.gateway or ...) and 
leave the gateway name as entity name.

Thanks
Marco


>
> Yes, this looks much better Marco, and is just the direction I was
> trying to communicate.
>
> There are a few things you could do to clarify the structure, and make 
> it more consistent with other sets of entities that are using the type/
> etc pattern:
>
> 1. make a PaymentGatewayConfigType entity instead of using
> Enumeration; the extra table isn't too big a deal, and other entities  
> (like Party/Person/PartyGroup, ContactMech/TelecomNumber/PostalAddress/
> etc, etc) do this as part of a shared PK pattern; also in general if
> the field pointed to the Enumeration entity it should always have the  
> suffic "EnumId" for clarity, but that doesn't matter since the Type
> entity is a better way to go
>
> 2. to be an extension of the PaymentGatewayConfig entity, the
> PayflowPro entity should have the same pk as it (just like Person and  
> PartyGroup have the partyId for their only pk field), ie it should
> just have the paymentGatewayConfigId field as the primary key instead  
> of the payflowProId; the reason for this is we want a one-to-one
> relationship between the two entities... we don't want multiple
> PayflowPro records for a single PaymentGatewayConfig record
>
> Anyway, looks good and it's great to have someone working on this!
>
> -David
>
>
> On Mar 31, 2009, at 11:17 AM, Marco Risaliti wrote:
>
> > Anyway I made I mistake in the above example because Payflow Pro is  
> > a credit card payment gateway and so it's not necessary a new
> > payment method type (EXT_PAYFLOW).
> > So the corrected example is the following:
> >
> > <entity-engine-xml>
> >    <EnumerationType enumTypeId="PGW_CODE" hasTable="N"
> > description="Payment Gateway"/>
> >
> >    <Enumeration enumId="PGW_PAYFLOWPRO" enumTypeId="PGW_CODE"
> > enumCode="PAYFLOWPRO" sequenceId="1" description="Payflow Pro"/>
> >
> >    <PaymentGatewayConfig paymentGatewayConfigId="PAYFLOW_TEST"
> > paymentGatewayTypeId="PGW_PAYFLOWPRO" description="PayFlow for test"/>
> >    <PaymentGatewayConfig paymentGatewayConfigId="PAYFLOW_PROD"
> > paymentGatewayTypeId="PGW_PAYFLOWPRO" description="PayFlow for
> > production"/>
> >
> >    <PayflowPro payflowProId="PAYFLOW_TEST"
> > paymentGatewayConfigId="PAYFLOW_TEST" certsPath="$
> > {sys:getProperty('ofbiz.home')}/applications/accounting/pfcerts"
> > hostAddress="test-payflow.verisign.com" hostPort="443"
> > vendor="TestVendor" userId="TestUserID" pwd="TestPassword"
> > partner="TestPartner" checkAvs="Y" checkCvv2="Y" preAuth="Y" 
> > enableTransmit="Y"/>
> >    <PayflowPro payflowProId="PAYFLOW_PROD"
> > paymentGatewayConfigId="PAYFLOW_PROD" certsPath="$
> > {sys:getProperty('ofbiz.home')}/applications/accounting/pfcerts"
> > hostAddress="payflow.verisign.com" hostPort="443"
> > vendor="ProdVendor" userId="ProdUserID" pwd="ProdPassword"
> > partner="ProdPartner" checkAvs="Y" checkCvv2="Y" preAuth="Y" 
> > enableTransmit="Y"/>
> >
> >    <ProductStorePaymentSetting productStoreId="9000"
> > paymentMethodTypeId="CREDIT_CARD"
> > paymentServiceTypeEnumId="PRDS_PAY_AUTH"
> > paymentService="payflowCCProcessor"
> > paymentGatewayConfigId="PAYFLOW_TEST" paymentPropertiesPath=""
> > applyToAllProducts=""/>
> > </entity-engine-xml>
> >
> > Thanks
> > Marco
> >
> >
> > Il giorno 31/mar/09, alle ore 15:12, mrisal...@libero.it ha scritto:
> >
> >> Hi David,
> >>
> >> thanks a lot for your great analysis help on this, I have now
> >> understood what you mean after trying those new entities.
> >> Also I prefer now to implement those specific entities instead of
> >> generic ones.
> >>
> >> If I understood correctly it could be something similar to the
> >> following examples:
> >>
> >> <entity entity-name="PaymentGatewayConfig"
> >>       package-name="org.ofbiz.accounting.payment"
> >>       title="Payment Gateway Configuration">
> >>   <field name="paymentGatewayConfigId" type="id-ne"></field>
> >>   <field name="paymentGatewayTypeId" type="id-ne"></field>
> >>   <field name="description" type="very-long"></field>
> >>   <prim-key field="paymentGatewayConfigId"/>
> >>   <relation type="one" fk-name="PGC_ENUM" rel-entity-
> >> name="Enumeration">
> >>   <key-map field-name="paymentGatewayTypeId" rel-field-
> >> name="enumId"/>
> >>   </relation>
> >> </entity>
> >> <entity entity-name="PayflowPro"
> >>       package-name="org.ofbiz.accounting.payment"
> >>       title="Payflow Pro Payment Gateway Configuration">
> >>   <field name="payflowProId" type="id-ne"></field>
> >>   <field name="paymentGatewayConfigId" type="id-ne"></field>
> >>   <field name="certsPath" type="value"><description>Path the the
> >> VeriSign Certificate</description></field>
> >>   <field name="hostAddress" type="value"><description>Address of
> >> the payment processor</description></field>
> >>   <field name="hostPort" type="numeric"><description>Port of the
> >> payment processor</description></field>
> >>   <field name="vendor" type="short-varchar"><description>Vendor of
> >> account information</description></field>
> >>   <field name="userId" type="short-varchar"><description>PayFlow
> >> UserID of account information</description></field>
> >>   <field name="pwd" type="short-varchar"><description>PayFlow
> >> Password of account information</description></field>
> >>   <field name="partner" type="short-varchar"><description>PayFlow
> >> Partner of account information</description></field>
> >>   <field name="checkAvs" type="indicator"><description>Use Address
> >> Verification</description></field>
> >>   <field name="checkCvv2" type="indicator"><description>Require 
> >> CVV2 Verification</description></field>
> >>   <field name="preAuth" type="indicator"><description>Pre-Authorize
> >> Payments (if set to N will auto-capture)</description></field>
> >>   <field name="enableTransmit" type="indicator"><description>Set to
> >> N to not transmit anything</description></field>
> >>   <prim-key field="payflowProId"/>
> >>   <relation type="one" fk-name="PFP_PGC" rel-entity-
> >> name="PaymentGatewayConfig">
> >>   <key-map field-name="paymentGatewayConfigId"/>
> >>   </relation>
> >> </entity>
> >> <entity entity-name="ProductStorePaymentSetting"
> >>       package-name="org.ofbiz.product.store"
> >>       title="Product Store Payment Settings Entity">
> >>   <field name="productStoreId" type="id-ne"></field>
> >>   <field name="paymentMethodTypeId" type="id-ne"></field>
> >>   <field name="paymentServiceTypeEnumId" type="id-ne"></field>
> >>   <field name="paymentService" type="value"></field>
> >>   <field name="paymentGatewayConfigId" type="id-ne"></field>
> >>   <field name="paymentPropertiesPath" type="value"></field>
> >>   <field name="applyToAllProducts" type="indicator"></field>
> >>   <prim-key field="productStoreId"/>
> >>   <prim-key field="paymentMethodTypeId"/>
> >>   <prim-key field="paymentServiceTypeEnumId"/>
> >>   <relation type="one" fk-name="PRDS_PS_PRDS" rel-entity-
> >> name="ProductStore">
> >>   <key-map field-name="productStoreId"/>
> >>   </relation>
> >>   <relation type="one" fk-name="PRDS_PS_PMNTTP" rel-entity-
> >> name="PaymentMethodType">
> >>   <key-map field-name="paymentMethodTypeId"/>
> >>   </relation>
> >>   <relation type="one" fk-name="PRDS_PS_ENUM" rel-entity-
> >> name="Enumeration">
> >>   <key-map field-name="paymentServiceTypeEnumId" rel-field-
> >> name="enumId"/>
> >>   </relation>
> >>   <relation type="one" fk-name="PRDS_PS_PGC" rel-entity-
> >> name="PaymentGatewayConfig">
> >>   <key-map field-name="paymentGatewayConfigId"/>
> >>   </relation>
> >> </entity>
> >>
> >> This is an example of Payflow Pro Payment Gateway configuration:
> >>
> >> <entity-engine-xml>
> >>   <PaymentMethodType description="Payflow Pro"
> >> paymentMethodTypeId="EXT_PAYFLOW"/>
> >>   <EnumerationType enumTypeId="PGW_CODE" hasTable="N"
> >> description="Payment Gateway"/>
> >>
> >>   <Enumeration enumId="PGW_PAYFLOWPRO" enumTypeId="PGW_CODE"
> >> enumCode="PAYFLOWPRO" sequenceId="1" description="Payflow Pro"/>
> >>
> >>   <PaymentGatewayConfig paymentGatewayConfigId="PAYFLOW_TEST"
> >> paymentGatewayTypeId="PGW_PAYFLOWPRO" description="PayFlow for  
> >> test"/>
> >>   <PaymentGatewayConfig paymentGatewayConfigId="PAYFLOW_PROD"
> >> paymentGatewayTypeId="PGW_PAYFLOWPRO" description="PayFlow for  
> >> production"/>
> >>
> >>   <PayflowPro payflowProId="PAYFLOW_TEST"
> >> paymentGatewayConfigId="PAYFLOW_TEST" certsPath="$
> >> {sys:getProperty('ofbiz.home')}/applications/accounting/pfcerts"
> >> hostAddress="test-payflow.verisign.com" hostPort="443"
> >> vendor="TestVendor" userId="TestUserID" pwd="TestPassword"
> >> partner="TestPartner" checkAvs="Y" checkCvv2="Y" preAuth="Y"
> >> enableTransmit="Y"/>
> >>   <PayflowPro payflowProId="PAYFLOW_PROD"
> >> paymentGatewayConfigId="PAYFLOW_PROD" certsPath="$
> >> {sys:getProperty('ofbiz.home')}/applications/accounting/pfcerts"
> >> hostAddress="payflow.verisign.com" hostPort="443"
> >> vendor="ProdVendor" userId="ProdUserID" pwd="ProdPassword"
> >> partner="ProdPartner" checkAvs="Y" checkCvv2="Y" preAuth="Y"
> >> enableTransmit="Y"/>
> >>
> >>   <ProductStorePaymentSetting productStoreId="9000"
> >> paymentMethodTypeId="EXT_PAYFLOW"
> >> paymentServiceTypeEnumId="PRDS_PAY_EXTERNAL" paymentService=""  
> >> paymentGatewayConfigId="PAYFLOW_TEST" paymentPropertiesPath=""  
> >> applyToAllProducts=""/>
> >> </entity-engine-xml>
> >>
> >> In this way we could handle also different configuration per
> >> database (test/production/...) and product stores.
> >>
> >> Idea and suggestions are welcome.
> >>
> >> Thanks a lot
> >> Marco
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>>
> >>> This has been discussed a few times and I think is on a few of the
> >>> lists around were people have brainstormed on things they'd like to
> >>> add/change/etc. I'm personally very in favor of it and I do
> >>> believe it
> >>> has been needed for a long time.
> >>>
> >>> As for the design, I'm very against the concept of super-generic
> >>> entities like this. They cause all sorts of problems, and I wish now
> >>> that I had never even introduced the extensibility stuff (attribute
> >>> tables and such) as they tend to make things messy and difficult to
> >>> follow and maintain... if/when they are used.
> >>>
> >>> It won't be too difficult to add fields and entities for each
> >>> property
> >>> in the files. With actual entities and fields generic maintenance  
> >>> can
> >>> be done through the Entity Data Maintenance pages, and for more user
> >>> friendly stuff we'd want a less generic UI anyway, and it's a lot
> >>> easier to implement that specific entities instead of generic ones.
> >>>
> >>> For example, we would create a PaymentGatewayConfig entity and
> >>> entities that extend it where needed for Cybersource, PayflowPro,
> >>> PayPal, etc, etc. The main change is that on the
> >>> ProductStorePaymentSetting entity instead of using the
> >>> "paymentPropertiesPath" field we would add a paymentGatewayConfigId
> >>> that points to the corresponding PaymentGatewayConfig entity. That
> >>> entity would have a type field, with different values for different
> >>> payment gateways (ie CyberSource, PayflowPro, etc).
> >>>
> >>> Each property in the payment.properties file would be mapped to a
> >>> field on one of these entities.
> >>>
> >>> Does that make sense?
> >>>
> >>> -David
> >>>
> >>>
> >>>
> >>> On Mar 30, 2009, at 4:14 AM, mrisal...@libero.it wrote:
> >>>
> >>>> Hi to all,
> >>>>
> >>>> what did you think if we move the payment.properties to an entity ?
> >>>> I tried to having a more general entity but I have seen that every
> >>>> single payment gateway having different parameters and so I tried
> >>>> with the following example:
> >>>>
> >>>> <EnumerationType description="Payment Gateway Code"
> >>>> enumTypeId="PGW_CODE" hasTable="N" parentTypeId=""/>
> >>>> <Enumeration description="Gift Certificate"
> >>>> enumCode="GIFTCERTIFICATE" enumId="PGW_GIFTCERTIFICATE"
> >>>> sequenceId="01" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="CyberSource" enumCode="CYBERSOURCE"
> >>>> enumId="PGW_CYBERSOURCE" sequenceId="02" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="ClearCommerce" enumCode="CLEARCOMMERCE"
> >>>> enumId="PGW_CLEARCOMMERCE" sequenceId="03" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="ValueLink" enumCode="VALUELINK"
> >>>> enumId="PGW_VALUELINK" sequenceId="04" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="PayFlow Pro" enumCode="PAYFLOW"
> >>>> enumId="PGW_PAYFLOW" sequenceId="05" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="WorldPay" enumCode="WORLDPAY"
> >>>> enumId="PGW_WORLDPAY" sequenceId="06" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="PayPal" enumCode="PAYPAL"
> >>>> enumId="PGW_PAYPAL" sequenceId="07" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="PCCharge" enumCode="PCCHARGE"
> >>>> enumId="PGW_PCCHARGE" sequenceId="08" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="RiTA" enumCode="RITA" enumId="PGW_RITA"
> >>>> sequenceId="09" enumTypeId="PGW_CODE"/>
> >>>> <Enumeration description="Authorize.Net" enumCode="AUTHORIZEDOTNET"
> >>>> enumId="PGW_AUTHORIZEDOTNET" sequenceId="10"
> >>>> enumTypeId="PGW_CODE"/>
> >>>>
> >>>> <!-- Product store gateway setting -->
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="certsPath"
> >>>> attributeValue="${sys:getProperty('ofbiz.home')}/applications/
> >>>> accounting/pfcerts" activeAttribute="Y" comment="Path the the
> >>>> VeriSign Certificate"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="hostAddress"
> >>>> attributeValue="test-payflow.verisign.com" activeAttribute="Y"
> >>>> comment="Address of the payment processor"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="hostPort"
> >>>> attributeValue="443" activeAttribute="Y" comment="Port of the
> >>>> payment processor"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="vendor"
> >>>> attributeValue="[Vendor]" activeAttribute="Y" comment="Payflow
> >>>> account information (Vendor)"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="user"
> >>>> attributeValue="[PayFlow UserID]" activeAttribute="Y"
> >>>> comment="Payflow account information (PayFlow UserID)"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="pwd"
> >>>> attributeValue="[PayFlow Password]" activeAttribute="Y"
> >>>> comment="Payflow account information (PayFlow Password)"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="partner"
> >>>> attributeValue="[PayFlow Partner]" activeAttribute="Y"
> >>>> comment="Payflow account information (PayFlow Partner)"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="checkAvs"
> >>>> attributeValue="Y" activeAttribute="Y" comment="Use Address
> >>>> Verification"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="checkCvv2"
> >>>> attributeValue="Y" activeAttribute="Y" comment="Require CVV2
> >>>> Verification"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="preAuth"
> >>>> attributeValue="Y" activeAttribute="Y" comment="Pre-Authorize
> >>>> Payments (if set to N will auto-capture)"/>
> >>>> <ProductStoreGatewaySetting productStoreId="9000"
> >>>> gatewayEnumId="PGW_PAYFLOW" attributeKey="enableTransmit"
> >>>> attributeValue="true" activeAttribute="Y" comment="Set to false to
> >>>> not transmit anything "/>
> >>>>
> >>>>
> >>>> Once we have it into the DB it could be extended in a custom
> >>>> components (hot-deploy) and it could be cashed and it could be no
> >>>> more necessary to restart OFBiz once you have to change a value
> >>>> into
> >>>> this property file.
> >>>> I have also moved those parameters at product store level so you
> >>>> could have different configuration by product store.
> >>>>
> >>>> It's only an idea and it could be introduced also after that new
> >>>> OFBiz release has been created.
> >>>>
> >>>> Any ideas and suggestions are welcomed because if it's working
> >>>> correctly for everyone it could be extended also to others property
> >>>> files (shipment.properties, catalog.properties, ...).
> >>>>
> >>>> Thanks in advance
> >>>> Marco
> >>>>
> >>>
> >>>
> >>
> >
>
>

Reply via email to