1. Modify mapping requirements for Import Members to NOT require Membership Status as an input column.
2. Allow "Status Hold" to be imported.
3. If Membership Status is NOT mapped, import should invoke the "calculate membership status" function and set/store the correct status based on the passed-in membership type, start and end dates, and the site's configured Membership Status rules,
4. If Membership Status IS mapped AND "Status Hold" is either NOT mapped or is FALSE - validate the imported status against the calculated status. If they don't match, skip import of the row and write an error row to the import error file indicating the mismatch ("Status in import row ("Current") does not match calculated status based on your configured Membership Status Rules ("Expired"). Record xxx was not imported."). If Status Hold is TRUE for a given row, we don't bother to validate the row (as we don't have a "warning" capability for import rows).
— Original Post from Chris Mott --------
When importing membership records the value specified for "Membership Status" is written to the membership record regardless of the membership status rules. The rules are only calculated after the membership has been edited and saved.
To create this on the demo system:
1. Create a membership record import file with a membership expiry date set before the current date (so the contact's membership status should be expired), but set the Membership Status field to "Current"
2. Import the membership record. Now note that the contact's membership is listed as Current, even though the rules state that is should be expired.
3. Edit the membership, then Save, and the correct Expired status is calculated.
There are two fixes that I can see, one a design question and one a bug:
a) Don't make the "Membership Status" a required field for membership imports. By default it should be calculated based on the dates and the membership type. If Membership Status is used on import then Hold field should be enforced at the same time, and then if Hold status is false, the value is Membership Status is ignored.
b) When data is imported the membership status should be calculated, so that problems like the above example are avoided. It may also be the case that the imported status is also held even after date transitions (i.e. it is in a hold state), but I have to wait 24 hours to confirm this on the demo system.
Note: If there is a workaround in 1.7 to allow import of a large number of memberships and have their status in the correct state that would be helpful. Otherwise I will have to manually edit and save each membership record.