OFBiz
  1. OFBiz
  2. OFBIZ-1462

One Page Checkout Process implemented in ecommerce

    Details

    • Type: New Feature New Feature
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Labels:
      None

      Description

      Here it is, the One Page Checkout Process implemented in ecommerce.
      The work remained in this:
      1) Processing Gift Card , PO number. & also
      2) Some UI related work.

      Done By :
      Anurag Meshram (Team Leader)
      Pankaj Savita (Team Member)

      UI design is based on Original work by "Ryan Foster <ryan.foster@hotwaxmedia.com>"

      1. Ecommerce_OnePage_CheckoutProcess.patch
        143 kB
        Pankaj Savita
      2. Ecommerce_OnePage_CheckoutProcess.patch
        141 kB
        Anurag Meshram
      3. OnePageCheckoutFtl.png
        103 kB
        Santosh Malviya
      4. onePageCheckoutUiEnhancement.patch
        9 kB
        Santosh Malviya
      There are no Sub-Tasks for this issue.

        Activity

        Hide
        Vikas Mayur added a comment -

        I think the basic functionality regarding one page checkout has been implemented.

        For any enhancements (one I can quickly think of is support for different payment methods) separate jira issues can be opened and patches can be submitted.

        One page checkout is a new process but I think it has been tested several times, if their are still any bugs etc they can also be reported as a separate jira issues.

        Show
        Vikas Mayur added a comment - I think the basic functionality regarding one page checkout has been implemented. For any enhancements (one I can quickly think of is support for different payment methods) separate jira issues can be opened and patches can be submitted. One page checkout is a new process but I think it has been tested several times, if their are still any bugs etc they can also be reported as a separate jira issues.
        Hide
        Jacques Le Roux added a comment -

        What is the status of this issue please ?

        Show
        Jacques Le Roux added a comment - What is the status of this issue please ?
        Hide
        Daniel Kunkel added a comment -

        The credit card processing for One Page Checkout seems to preclude a reorder.

        Error:Error:5***************6 is not a valid Visa credit card number. (It appears to be a MasterCard credit card number) calling service updateCreditCard in createUpdateCreditCard calling service createUpdateCreditCard in createUpdateBillingAndPayment

        Fixing the incorrect mention of visa in the error message, (or just deleting the word visa) would also be helpful.

        Show
        Daniel Kunkel added a comment - The credit card processing for One Page Checkout seems to preclude a reorder. Error:Error:5***************6 is not a valid Visa credit card number. (It appears to be a MasterCard credit card number) calling service updateCreditCard in createUpdateCreditCard calling service createUpdateCreditCard in createUpdateBillingAndPayment Fixing the incorrect mention of visa in the error message, (or just deleting the word visa) would also be helpful.
        Hide
        Jacques Le Roux added a comment -

        Just tested with
        Country = France
        State = No States/Provinces exists

        I get this error

        2008-08-19 16:42:45,828 (http-0.0.0.0-18443-2) [ GenericDelegator.java:768:ERROR]
        ---- exception report ----------------------------------------------------------
        Failure in create operation for entity [PostalAddress]: org.ofbiz.entity.GenericEntityException: Error while inserting: [GenericEntity:PostalAddress][address1,2004 Factory Blvd(java.lang.String)][address2,nul
        l()][city,Orem(java.lang.String)][contactMechId,10012(java.lang.String)][countryGeoId,FRA(java.lang.String)][createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)][createdTxStamp,2008-08-19 16:42:45.531(ja
        va.sql.Timestamp)][lastUpdatedStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)][lastUpdatedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)][postalCode,34560(java.lang.String)][stateProvinceGeoId,undefine
        d(java.lang.String)] (SQL Exception while executing the following:INSERT INTO public.POSTAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, CO
        UNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POSTAL_CODE_GEO_ID, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (
        ERREUR: une instruction insert ou update sur la table ? postal_address ? viole la contrainte de cl?
        ?trang?re ? post_addr_spgeo ?
        Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.)). Rolling back transaction.
        Exception: org.ofbiz.entity.GenericEntityException
        Message: Error while inserting: [GenericEntity:PostalAddress][address1,2004 Factory Blvd(java.lang.String)][address2,null()][city,Orem(java.lang.String)][contactMechId,10012(java.lang.String)][countryGeoId,FR
        A(java.lang.String)][createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)][createdTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)][lastUpdatedStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)][lastUpd
        atedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)][postalCode,34560(java.lang.String)][stateProvinceGeoId,undefined(java.lang.String)] (SQL Exception while executing the following:INSERT INTO public.POS
        TAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, COUNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POSTAL_CODE_GEO_ID, LAST_UPDATED_STA
        MP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (ERREUR: une instruction insert ou update sur la table ? postal_address ? viole la contra
        inte de cl?
        ?trang?re ? post_addr_spgeo ?
        Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.))
        ---- stack trace ---------------------------------------------------------------
        org.ofbiz.entity.GenericEntityException: Error while inserting: [GenericEntity:PostalAddress][address1,2004 Factory Blvd(java.lang.String)][address2,null()][city,Orem(java.lang.String)][contactMechId,10012(ja
        va.lang.String)][countryGeoId,FRA(java.lang.String)][createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)][createdTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)][lastUpdatedStamp,2008-08-19 16:42:45.
        765(java.sql.Timestamp)][lastUpdatedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)][postalCode,34560(java.lang.String)][stateProvinceGeoId,undefined(java.lang.String)] (SQL Exception while executing the
        following:INSERT INTO public.POSTAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, COUNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POST
        AL_CODE_GEO_ID, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (ERREUR: une instruction insert ou update sur la table ?
        postal_address ? viole la contrainte de cl?
        ?trang?re ? post_addr_spgeo ?
        Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.))

        Which means that the state_province_geo_id undefined does not exist in Entity Geo...

        Show
        Jacques Le Roux added a comment - Just tested with Country = France State = No States/Provinces exists I get this error 2008-08-19 16:42:45,828 (http-0.0.0.0-18443-2) [ GenericDelegator.java:768:ERROR] ---- exception report ---------------------------------------------------------- Failure in create operation for entity [PostalAddress] : org.ofbiz.entity.GenericEntityException: Error while inserting: [GenericEntity:PostalAddress] [address1,2004 Factory Blvd(java.lang.String)] [address2,nul l()] [city,Orem(java.lang.String)] [contactMechId,10012(java.lang.String)] [countryGeoId,FRA(java.lang.String)] [createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)] [createdTxStamp,2008-08-19 16:42:45.531(ja va.sql.Timestamp)] [lastUpdatedStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)] [lastUpdatedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)] [postalCode,34560(java.lang.String)] [stateProvinceGeoId,undefine d(java.lang.String)] (SQL Exception while executing the following:INSERT INTO public.POSTAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, CO UNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POSTAL_CODE_GEO_ID, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ( ERREUR: une instruction insert ou update sur la table ? postal_address ? viole la contrainte de cl? ?trang?re ? post_addr_spgeo ? Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.)). Rolling back transaction. Exception: org.ofbiz.entity.GenericEntityException Message: Error while inserting: [GenericEntity:PostalAddress] [address1,2004 Factory Blvd(java.lang.String)] [address2,null()] [city,Orem(java.lang.String)] [contactMechId,10012(java.lang.String)] [countryGeoId,FR A(java.lang.String)] [createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)] [createdTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)] [lastUpdatedStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)] [lastUpd atedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)] [postalCode,34560(java.lang.String)] [stateProvinceGeoId,undefined(java.lang.String)] (SQL Exception while executing the following:INSERT INTO public.POS TAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, COUNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POSTAL_CODE_GEO_ID, LAST_UPDATED_STA MP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (ERREUR: une instruction insert ou update sur la table ? postal_address ? viole la contra inte de cl? ?trang?re ? post_addr_spgeo ? Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.)) ---- stack trace --------------------------------------------------------------- org.ofbiz.entity.GenericEntityException: Error while inserting: [GenericEntity:PostalAddress] [address1,2004 Factory Blvd(java.lang.String)] [address2,null()] [city,Orem(java.lang.String)] [contactMechId,10012(ja va.lang.String)] [countryGeoId,FRA(java.lang.String)] [createdStamp,2008-08-19 16:42:45.765(java.sql.Timestamp)] [createdTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)] [lastUpdatedStamp,2008-08-19 16:42:45. 765(java.sql.Timestamp)] [lastUpdatedTxStamp,2008-08-19 16:42:45.531(java.sql.Timestamp)] [postalCode,34560(java.lang.String)] [stateProvinceGeoId,undefined(java.lang.String)] (SQL Exception while executing the following:INSERT INTO public.POSTAL_ADDRESS (CONTACT_MECH_ID, TO_NAME, ATTN_NAME, ADDRESS1, ADDRESS2, DIRECTIONS, CITY, POSTAL_CODE, POSTAL_CODE_EXT, COUNTRY_GEO_ID, STATE_PROVINCE_GEO_ID, COUNTY_GEO_ID, POST AL_CODE_GEO_ID, LAST_UPDATED_STAMP, LAST_UPDATED_TX_STAMP, CREATED_STAMP, CREATED_TX_STAMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) (ERREUR: une instruction insert ou update sur la table ? postal_address ? viole la contrainte de cl? ?trang?re ? post_addr_spgeo ? Detail: La cl? (state_province_geo_id)=(undefined) n'est pas pr?sente dans la table ? geo ?.)) Which means that the state_province_geo_id undefined does not exist in Entity Geo...
        Hide
        Jacques Le Roux added a comment -

        DemoCustomer tel # does not appear by default in one page checkout though he has one in DemoOrderPeopleData.xml, Same for admin.

        Show
        Jacques Le Roux added a comment - DemoCustomer tel # does not appear by default in one page checkout though he has one in DemoOrderPeopleData.xml, Same for admin.
        Hide
        Santosh Malviya added a comment -

        Screen shot for one page checkout UI enhancement patch.

        Show
        Santosh Malviya added a comment - Screen shot for one page checkout UI enhancement patch.
        Hide
        Santosh Malviya added a comment -

        Here is patch for UI enhancement for one page checkout process.

        Santosh Malviya

        Show
        Santosh Malviya added a comment - Here is patch for UI enhancement for one page checkout process. Santosh Malviya
        Hide
        Anil K Patel added a comment -

        Pankaj, Thanks for the updated patch. Please make sure all the files have ASL on them and also move cartrules.js to js folder in ecommerce. Review other things once again to make sure there is nothing left out.
        Regards
        Anil Patel

        Show
        Anil K Patel added a comment - Pankaj, Thanks for the updated patch. Please make sure all the files have ASL on them and also move cartrules.js to js folder in ecommerce. Review other things once again to make sure there is nothing left out. Regards Anil Patel
        Hide
        Pankaj Savita added a comment -

        I have implemented client side validations (using Ajax) in both the sections(STEP2: Shipping & STEP3: Billing) :
        1) Validated Shipping Address of the customer(using Ajax)
        In this user won't be able to process shipping information unless he/she enters all the required fields.
        If user click on the 'Continue to Step3' button without filling all the required fields, the applied validation
        will disable the button & show *(required) on the fields left empty. If the shipping form is validated then using
        'Ajax.Request' we process the shipping info by calling 'createUpdateCustomerAndShippingContact' service.

        2) Validated Billing Address of the customer(using Ajax)
        In this user won't be able to process billing information unless he/she enters all the required fields.
        If user click on the 'Confirm Purchase' button without filling all the required fields, the applied validation
        will disable the button & show *(required) on the fields left empty. If the billing form is validated then using
        'Ajax.Request' we process the billing info by calling 'createUpdateBillingAndPayment' service.

        Need to implement:
        1) Implement Ajax based ReCalculate cart feature in View Cart page (Creating a subtask for this)
        2) Copy data to Billing information fields from Shipping info in case of user checks on Billing Address same as Shipping.
        3) Processing Gift Card & PO number

        Show
        Pankaj Savita added a comment - I have implemented client side validations (using Ajax) in both the sections(STEP2: Shipping & STEP3: Billing) : 1) Validated Shipping Address of the customer(using Ajax) In this user won't be able to process shipping information unless he/she enters all the required fields. If user click on the 'Continue to Step3' button without filling all the required fields, the applied validation will disable the button & show *(required) on the fields left empty. If the shipping form is validated then using 'Ajax.Request' we process the shipping info by calling 'createUpdateCustomerAndShippingContact' service. 2) Validated Billing Address of the customer(using Ajax) In this user won't be able to process billing information unless he/she enters all the required fields. If user click on the 'Confirm Purchase' button without filling all the required fields, the applied validation will disable the button & show *(required) on the fields left empty. If the billing form is validated then using 'Ajax.Request' we process the billing info by calling 'createUpdateBillingAndPayment' service. Need to implement: 1) Implement Ajax based ReCalculate cart feature in View Cart page (Creating a subtask for this) 2) Copy data to Billing information fields from Shipping info in case of user checks on Billing Address same as Shipping. 3) Processing Gift Card & PO number
        Hide
        Anurag Meshram added a comment -

        Yes Vikas, We will see a new button in login page of checkout process (i.e please see login.ftl in the above patch ). By the help of this button we can select one page checkout and after click on these button we will be forwarded to the one page checkout page.

        Show
        Anurag Meshram added a comment - Yes Vikas, We will see a new button in login page of checkout process (i.e please see login.ftl in the above patch ). By the help of this button we can select one page checkout and after click on these button we will be forwarded to the one page checkout page.
        Hide
        Vikas Mayur added a comment -

        Jacques - You are right about that. There is OrderUiLabels.properties file in this patch and that too because its a very old patch.

        I am not too sure about how it will work. I might be wrong but there can be option in the main page header or mini cart to select one page checkout.
        Current implementation supports only quest user checkout. However this patch is not complete and need cleanups and improvements.
        We have worked on this for some time and the patch is no where near to what can be posted here.

        Thanks for commenting on this issue and making this live again.

        Show
        Vikas Mayur added a comment - Jacques - You are right about that. There is OrderUiLabels.properties file in this patch and that too because its a very old patch. I am not too sure about how it will work. I might be wrong but there can be option in the main page header or mini cart to select one page checkout. Current implementation supports only quest user checkout. However this patch is not complete and need cleanups and improvements. We have worked on this for some time and the patch is no where near to what can be posted here. Thanks for commenting on this issue and making this live again.
        Hide
        Vikas Mayur added a comment -

        Well, This task was actually started at HWM (Hotwax Media Inc.). This task is about adding a new checkout process in for Ecommerce in which all the information if filled on a single page and hence the name (One page checkout process).
        This page is divided into 4 sections :
        1) Show cart form
        2) Shipping Address form
        3) Billing Address form
        4) Process order form

        After adding items to the cart the user can go to either of the checkout process i.e. quick anon, anon or one page.

        With the use of Ajax every form is submitted and a summary information is shown back on this form.

        Actually this has been worked in drafts. One commit has been made in moving this issue to completion is the refining/improving of the variable name used in Events / ftls in Ecommerce.

        Every one is welcome to comment / help on this issue to make it possibllly a part of OFBiz.

        Show
        Vikas Mayur added a comment - Well, This task was actually started at HWM (Hotwax Media Inc.). This task is about adding a new checkout process in for Ecommerce in which all the information if filled on a single page and hence the name (One page checkout process). This page is divided into 4 sections : 1) Show cart form 2) Shipping Address form 3) Billing Address form 4) Process order form After adding items to the cart the user can go to either of the checkout process i.e. quick anon, anon or one page. With the use of Ajax every form is submitted and a summary information is shown back on this form. Actually this has been worked in drafts. One commit has been made in moving this issue to completion is the refining/improving of the variable name used in Events / ftls in Ecommerce. Every one is welcome to comment / help on this issue to make it possibllly a part of OFBiz.
        Hide
        Jacques Le Roux added a comment -

        Quickly tested : not sure how it works... Moreover needs to be updated regarding gone properties files (now xml files) ...

        Show
        Jacques Le Roux added a comment - Quickly tested : not sure how it works... Moreover needs to be updated regarding gone properties files (now xml files) ...
        Hide
        Bilgin Ibryam added a comment -

        What means HWM task?

        Show
        Bilgin Ibryam added a comment - What means HWM task?
        Hide
        Jacques Le Roux added a comment -

        No takers (sounds like a HWM task ?) ?

        Show
        Jacques Le Roux added a comment - No takers (sounds like a HWM task ?) ?
        Hide
        Pankaj Savita added a comment -

        By mistake I left the Priority to Major. It should be Minor, Sorry.

        Show
        Pankaj Savita added a comment - By mistake I left the Priority to Major. It should be Minor, Sorry.
        Hide
        Anurag Meshram added a comment -

        This is the updated patch for the Ecommerce One page checkout process .

        Show
        Anurag Meshram added a comment - This is the updated patch for the Ecommerce One page checkout process .
        Hide
        Pankaj Savita added a comment -

        One Page Checkout Process implemented in ecommerce.

        Show
        Pankaj Savita added a comment - One Page Checkout Process implemented in ecommerce.

          People

          • Assignee:
            Vikas Mayur
            Reporter:
            Pankaj Savita
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development