diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_base.inc b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_base.inc new file mode 100644 index 00000000..01525e7a --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_base.inc @@ -0,0 +1,86 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_farm_customer', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_farm_invoice_number'. + $field_bases['field_farm_invoice_number'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_farm_invoice_number', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_farm_total_price'. + $field_bases['field_farm_total_price'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_farm_total_price', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'fraction', + 'settings' => array(), + 'translatable' => 0, + 'type' => 'fraction', + ); + + // Exported field_base: 'field_farm_unit_price'. + $field_bases['field_farm_unit_price'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_farm_unit_price', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'fraction', + 'settings' => array(), + 'translatable' => 0, + 'type' => 'fraction', + ); + + return $field_bases; +} diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_instance.inc b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_instance.inc new file mode 100644 index 00000000..d507e44b --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.field_instance.inc @@ -0,0 +1,469 @@ + 'farm_sale', + 'deleted' => 0, + 'description' => 'What assets do this sale log pertain to?', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'entityreference', + 'settings' => array( + 'bypass_access' => 0, + 'link' => 1, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_asset', + 'label' => 'Assets', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'entityreference_view_widget', + 'settings' => array( + 'allow_duplicates' => 0, + 'close_modal' => 1, + 'pass_argument' => 1, + 'pass_arguments' => '', + 'rendered_entity' => 0, + 'view' => 'farm_asset_entityreference_view|entityreference_view_widget', + 'view_mode' => 'full', + ), + 'type' => 'entityreference_view_widget', + 'weight' => 2, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_customer'. + $field_instances['log-farm_sale-field_farm_customer'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_customer', + 'label' => 'Customer', + 'required' => 0, + 'settings' => array( + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_files'. + $field_instances['log-farm_sale-field_farm_files'] = array( + 'bundle' => 'farm_sale', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'file', + 'settings' => array(), + 'type' => 'file_table', + 'weight' => 11, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_files', + 'label' => 'Files', + 'required' => 0, + 'settings' => array( + 'description_field' => 1, + 'file_directory' => 'farm/log/sale', + 'file_extensions' => 'csv doc docx odt odp ods pdf ppt pptx txt xls xlsx kml kmz zip tar gz', + 'max_filesize' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'multiupload_filefield_widget', + 'settings' => array( + 'progress_indicator' => 'bar', + ), + 'type' => 'file_mfw', + 'weight' => 8, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_images'. + $field_instances['log-farm_sale-field_farm_images'] = array( + 'bundle' => 'farm_sale', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'colorbox', + 'settings' => array( + 'colorbox_caption' => 'auto', + 'colorbox_caption_custom' => '', + 'colorbox_gallery' => 'post', + 'colorbox_gallery_custom' => '', + 'colorbox_image_style' => '', + 'colorbox_multivalue_index' => NULL, + 'colorbox_node_style' => 'thumbnail', + 'colorbox_node_style_first' => 'large', + ), + 'type' => 'colorbox', + 'weight' => 10, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_images', + 'label' => 'Photos', + 'required' => 0, + 'settings' => array( + 'alt_field' => 0, + 'default_image' => 0, + 'file_directory' => 'farm/log/sale', + 'file_extensions' => 'png gif jpg jpeg', + 'max_filesize' => '', + 'max_resolution' => '', + 'min_resolution' => '', + 'title_field' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'multiupload_imagefield_widget', + 'settings' => array( + 'preview_image_style' => 'thumbnail', + 'progress_indicator' => 'bar', + ), + 'type' => 'image_miw', + 'weight' => 7, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_invoice_number'. + $field_instances['log-farm_sale-field_farm_invoice_number'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 2, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_invoice_number', + 'label' => 'Invoice number', + 'required' => 0, + 'settings' => array( + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 4, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_log_category'. + $field_instances['log-farm_sale-field_farm_log_category'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'Use this to organize your logs into categories for easier searching and filtering later.', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'taxonomy', + 'settings' => array(), + 'type' => 'taxonomy_term_reference_plain', + 'weight' => 8, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_log_category', + 'label' => 'Log category', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_select', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_log_owner'. + $field_instances['log-farm_sale-field_farm_log_owner'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'Optionally assign this task to one or more people.', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'entityreference', + 'settings' => array( + 'bypass_access' => FALSE, + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 9, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_log_owner', + 'label' => 'Owner', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_select', + 'weight' => 10, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_lot_number'. + $field_instances['log-farm_sale-field_farm_lot_number'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'If this sale is from a specific harvest lot, enter the lot number here.', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 3, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_lot_number', + 'label' => 'Lot number', + 'required' => 0, + 'settings' => array( + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_notes'. + $field_instances['log-farm_sale-field_farm_notes'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 7, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_notes', + 'label' => 'Notes', + 'required' => 0, + 'settings' => array( + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_quantity'. + $field_instances['log-farm_sale-field_farm_quantity'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'Use this field to specify the total quantity that was sold.', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'field_collection', + 'settings' => array( + 'view_mode' => 'full', + ), + 'type' => 'field_collection_fields', + 'weight' => 4, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_quantity', + 'label' => 'Quantity', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'field_collection', + 'settings' => array(), + 'type' => 'field_collection_embed', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_total_price'. + $field_instances['log-farm_sale-field_farm_total_price'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'fraction', + 'settings' => array( + 'auto_precision' => TRUE, + 'precision' => 0, + ), + 'type' => 'fraction_decimal', + 'weight' => 6, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_total_price', + 'label' => 'Total price', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'fraction', + 'settings' => array( + 'auto_precision' => 1, + 'precision' => 0, + ), + 'type' => 'fraction_decimal', + 'weight' => 7, + ), + ); + + // Exported field_instance: 'log-farm_sale-field_farm_unit_price'. + $field_instances['log-farm_sale-field_farm_unit_price'] = array( + 'bundle' => 'farm_sale', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'inline', + 'module' => 'fraction', + 'settings' => array( + 'auto_precision' => TRUE, + 'precision' => 0, + ), + 'type' => 'fraction_decimal', + 'weight' => 5, + ), + ), + 'entity_type' => 'log', + 'field_name' => 'field_farm_unit_price', + 'label' => 'Unit price', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'fraction', + 'settings' => array( + 'auto_precision' => 1, + 'precision' => 0, + ), + 'type' => 'fraction_decimal', + 'weight' => 6, + ), + ); + + // Translatables + // Included for use with string extractors like potx. + t('Assets'); + t('Customer'); + t('Files'); + t('If this sale is from a specific harvest lot, enter the lot number here.'); + t('Invoice number'); + t('Log category'); + t('Lot number'); + t('Notes'); + t('Optionally assign this task to one or more people.'); + t('Owner'); + t('Photos'); + t('Quantity'); + t('Total price'); + t('Unit price'); + t('Use this field to specify the total quantity that was sold.'); + t('Use this to organize your logs into categories for easier searching and filtering later.'); + t('What assets do this sale log pertain to?'); + + return $field_instances; +} diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.inc b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.inc new file mode 100644 index 00000000..3a446474 --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.features.inc @@ -0,0 +1,31 @@ + "1"); + } +} + +/** + * Implements hook_default_log_type(). + */ +function farm_log_sale_default_log_type() { + $items = array(); + $items['farm_sale'] = entity_import('log_type', '{ + "type" : "farm_sale", + "label" : "Sale", + "weight" : 0, + "name_pattern" : "[log:field-farm-customer] [log:field-farm-invoice-number] [log:field-farm-asset]", + "name_edit" : "0", + "done" : "1", + "rdf_mapping" : [] + }'); + return $items; +} diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.field_group.inc b/modules/farm/farm_log/farm_log_sale/farm_log_sale.field_group.inc new file mode 100644 index 00000000..a03d2864 --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.field_group.inc @@ -0,0 +1,202 @@ +disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_assets|log|farm_sale|form'; + $field_group->group_name = 'group_farm_assets'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'Assets', + 'weight' => '2', + 'children' => array( + 0 => 'field_farm_asset', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'label' => 'Assets', + 'instance_settings' => array( + 'required_fields' => 1, + 'id' => '', + 'classes' => 'group-farm-assets field-group-fieldset', + 'description' => '', + ), + 'formatter' => 'collapsed', + ), + ); + $field_groups['group_farm_assets|log|farm_sale|form'] = $field_group; + + $field_group = new stdClass(); + $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_assignment|log|farm_sale|form'; + $field_group->group_name = 'group_farm_assignment'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'Assignment', + 'weight' => '5', + 'children' => array( + 0 => 'field_farm_log_owner', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'label' => 'Assignment', + 'instance_settings' => array( + 'required_fields' => 1, + 'id' => '', + 'classes' => 'group-farm-assignment field-group-fieldset', + 'description' => '', + ), + 'formatter' => 'collapsed', + ), + ); + $field_groups['group_farm_assignment|log|farm_sale|form'] = $field_group; + + $field_group = new stdClass(); + $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_attachments|log|farm_sale|form'; + $field_group->group_name = 'group_farm_attachments'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'File attachments', + 'weight' => '6', + 'children' => array( + 0 => 'field_farm_files', + 1 => 'field_farm_images', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'label' => 'File attachments', + 'instance_settings' => array( + 'required_fields' => 1, + 'id' => '', + 'classes' => 'group-farm-attachments field-group-fieldset', + 'description' => '', + ), + 'formatter' => 'collapsed', + ), + ); + $field_groups['group_farm_attachments|log|farm_sale|form'] = $field_group; + + $field_group = new stdClass(); + $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_category|log|farm_sale|form'; + $field_group->group_name = 'group_farm_category'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'Category', + 'weight' => '4', + 'children' => array( + 0 => 'field_farm_log_category', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'label' => 'Category', + 'instance_settings' => array( + 'required_fields' => 1, + 'id' => '', + 'classes' => 'group-farm-category field-group-fieldset', + 'description' => '', + ), + 'formatter' => 'collapsed', + ), + ); + $field_groups['group_farm_category|log|farm_sale|form'] = $field_group; + + $field_group = new stdClass(); + $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_general|log|farm_sale|form'; + $field_group->group_name = 'group_farm_general'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'General information', + 'weight' => '0', + 'children' => array( + 0 => 'field_farm_lot_number', + 1 => 'field_farm_unit_price', + 2 => 'field_farm_total_price', + 3 => 'field_farm_customer', + 4 => 'field_farm_invoice_number', + 5 => 'timestamp', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'formatter' => 'collapsible', + 'instance_settings' => array( + 'description' => '', + 'classes' => 'group-farm-general field-group-fieldset', + 'required_fields' => 1, + 'id' => '', + ), + ), + ); + $field_groups['group_farm_general|log|farm_sale|form'] = $field_group; + + $field_group = new stdClass(); + $field_group->disabled = FALSE; /* Edit this to true to make a default field_group disabled initially */ + $field_group->api_version = 1; + $field_group->identifier = 'group_farm_notes|log|farm_sale|form'; + $field_group->group_name = 'group_farm_notes'; + $field_group->entity_type = 'log'; + $field_group->bundle = 'farm_sale'; + $field_group->mode = 'form'; + $field_group->parent_name = ''; + $field_group->data = array( + 'label' => 'Notes', + 'weight' => '3', + 'children' => array( + 0 => 'field_farm_notes', + ), + 'format_type' => 'fieldset', + 'format_settings' => array( + 'label' => 'Notes', + 'instance_settings' => array( + 'required_fields' => 1, + 'id' => '', + 'classes' => 'group-farm-notes field-group-fieldset', + 'description' => '', + ), + 'formatter' => 'collapsed', + ), + ); + $field_groups['group_farm_notes|log|farm_sale|form'] = $field_group; + + // Translatables + // Included for use with string extractors like potx. + t('Assets'); + t('Assignment'); + t('Category'); + t('File attachments'); + t('General information'); + t('Notes'); + + return $field_groups; +} diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.info b/modules/farm/farm_log/farm_log_sale/farm_log_sale.info new file mode 100644 index 00000000..d9683be7 --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.info @@ -0,0 +1,47 @@ +name = Farm Log: Sale +description = Provides a sale log type. +core = 7.x +package = farmOS +dependencies[] = colorbox +dependencies[] = ctools +dependencies[] = entity +dependencies[] = entityreference +dependencies[] = entityreference_view_widget +dependencies[] = farm_fields +dependencies[] = farm_quantity +dependencies[] = features +dependencies[] = field_collection +dependencies[] = field_group +dependencies[] = file +dependencies[] = fraction +dependencies[] = log +dependencies[] = multiupload_filefield_widget +dependencies[] = multiupload_imagefield_widget +dependencies[] = options +dependencies[] = taxonomy +dependencies[] = text +features[ctools][] = field_group:field_group:1 +features[features_api][] = api:2 +features[field_base][] = field_farm_customer +features[field_base][] = field_farm_invoice_number +features[field_base][] = field_farm_total_price +features[field_base][] = field_farm_unit_price +features[field_group][] = group_farm_assets|log|farm_sale|form +features[field_group][] = group_farm_assignment|log|farm_sale|form +features[field_group][] = group_farm_attachments|log|farm_sale|form +features[field_group][] = group_farm_category|log|farm_sale|form +features[field_group][] = group_farm_general|log|farm_sale|form +features[field_group][] = group_farm_notes|log|farm_sale|form +features[field_instance][] = log-farm_sale-field_farm_asset +features[field_instance][] = log-farm_sale-field_farm_customer +features[field_instance][] = log-farm_sale-field_farm_files +features[field_instance][] = log-farm_sale-field_farm_images +features[field_instance][] = log-farm_sale-field_farm_invoice_number +features[field_instance][] = log-farm_sale-field_farm_log_category +features[field_instance][] = log-farm_sale-field_farm_log_owner +features[field_instance][] = log-farm_sale-field_farm_lot_number +features[field_instance][] = log-farm_sale-field_farm_notes +features[field_instance][] = log-farm_sale-field_farm_quantity +features[field_instance][] = log-farm_sale-field_farm_total_price +features[field_instance][] = log-farm_sale-field_farm_unit_price +features[log_type][] = farm_sale diff --git a/modules/farm/farm_log/farm_log_sale/farm_log_sale.module b/modules/farm/farm_log/farm_log_sale/farm_log_sale.module new file mode 100644 index 00000000..7b594586 --- /dev/null +++ b/modules/farm/farm_log/farm_log_sale/farm_log_sale.module @@ -0,0 +1,7 @@ +