diff --git a/product/ERP5/Document/PaySheetTransaction.py b/product/ERP5/Document/PaySheetTransaction.py
index 8e829e1f24de457f72d74eb649b8f6234b37ccb7..7e991da6710fa5f9e0bc9ffa0241f02b47529cf8 100644
--- a/product/ERP5/Document/PaySheetTransaction.py
+++ b/product/ERP5/Document/PaySheetTransaction.py
@@ -203,7 +203,7 @@ class PaySheetTransaction(Invoice):
                            'cell_list'        : []
                          }
       
-      # create cells if a value has been entered by accountable
+      # create cells if a value has been entered 
       if quantity or price:
         for salary_range in salary_range_categories: 
           # Define an empty new cell
@@ -285,12 +285,13 @@ class PaySheetTransaction(Invoice):
             else:
               old_val = 0
             new_val = old_val + paysheetcell.getQuantity()
+            # increment the corresponding amount
             base_amount_current_value_dict[base_amount] = new_val
 
     # get not editables model lines
     model = self.getSpecialiseValue()
     model_line_list = model.contentValues(portal_type='Pay Sheet Model Line',
-                                               sort_on='int_index')
+                                          sort_on='int_index')
     model_line_list = [line for line in model_line_list if not line.getEditable()]
 
     pay_sheet_line_list = []
@@ -304,18 +305,18 @@ class PaySheetTransaction(Invoice):
         # This line should not be used
         continue
 
-      service     = model_line.getResourceValue()
-      title       = model_line.getTitleOrId()
-      int_index   = model_line.getFloatIndex()
-      id          = model_line.getId()
+      service          = model_line.getResourceValue()
+      title            = model_line.getTitleOrId()
+      int_index        = model_line.getFloatIndex()
+      id               = model_line.getId()
       base_amount_list = model_line.getBaseAmountList()
-      res         = service.getRelativeUrl()
+      res              = service.getRelativeUrl()
       if model_line.getDescription():
-        desc      = ''.join(model_line.getDescription())
+        desc = ''.join(model_line.getDescription())
       # if the model_line description is empty, the payroll service 
       # description is used
       else: 
-        desc  = ''.join(service.getDescription())
+        desc = ''.join(service.getDescription())
       
       variation_share_list = model_line.getVariationCategoryList(\
                                       base_category_list=['tax_category',])
@@ -325,74 +326,86 @@ class PaySheetTransaction(Invoice):
       for share in variation_share_list:
         for slice in variation_slice_list:
           cell = model_line.getCell(slice, share)
-          if cell is not None:
-            # get the slice :
-            model_slice = None
-            model_slice = model_line.getParentValue().getCell(slice)
-            quantity = 0.0
-            price = 0.0
-            if model_slice is not None:
-              model_slice_min = model_slice.getQuantityRangeMin()
-              model_slice_max = model_slice.getQuantityRangeMax()
-
-              ######################
-              # calculation part : #
-              ######################
-              # get the model line script
-              script_name = model_line.getCalculationScriptId()
-              if script_name is None:
-                # if model line script is None, get the default model script
-                script_name = model.getDefaultCalculationScriptId()
-
-              if script_name is None:
-                # if no calculation script found, use a default script :
-                script_name = 'PaySheetTransaction_defaultCalculationScript'
-
-              if getattr(self, script_name, None) is None:
-                raise ValueError, "Unable to find `%s` calculation script" % \
-                                                                 script_name
-              calculation_script = getattr(self, script_name, None)
-              quantity=0
-              price=0
-              result = calculation_script(\
-                base_amount_current_value_dict=base_amount_current_value_dict,
-                share=share,
-                model_slice_min=model_slice_min, 
-                model_slice_max=model_slice_max, 
-                cell=cell,)
-              quantity = result['quantity']
-              price = result['price']
-
-            # Cell creation :
-            # Define an empty new cell
-            new_cell = { 'axe_list' : [share, slice]
-                       , 'quantity' : quantity
-                       , 'price'    : price
-                       }
-            cell_list.append(new_cell)
-
-            #XXX this is a hack to have the net salary
-            base_list = model_line.getResourceValue().getBaseAmountList()
-            if price is not None and 'employee_share' in share and\
-                not ('base_salary' in base_list or\
-                    'bonus' in base_list or\
-                    'gross_salary' in base_list):
-              employee_tax_amount += round((price * quantity), precision)
-
-            # update base participation
-            base_participation_list = service.getBaseAmountList(base=1)
-            for base_participation in base_participation_list:
-              if quantity:
-                if base_amount_current_value_dict.has_key(base_participation):
-                  old_val = base_amount_current_value_dict[base_participation]
-                else:
-                  old_val = 0
-                new_val = old_val + quantity
-
-                if price:
-                  if old_val != 0:
-                    new_val = round((old_val + quantity*price), precision) 
-                base_amount_current_value_dict[base_participation] = new_val
+          if cell is None:
+            LOG('createNotEditablePaySheetLineList : cell is None')
+            continue
+          # get the slice :
+          model_slice = None
+          model_slice = model_line.getParentValue().getCell(slice)
+          quantity = 0.0
+          price = 0.0
+          if model_slice is None:
+            LOG('createNotEditablePaySheetLineList : model_slice %s is None' %\
+                                                                          slice)
+            continue
+          model_slice_min = model_slice.getQuantityRangeMin()
+          model_slice_max = model_slice.getQuantityRangeMax()
+
+          ######################
+          # calculation part : #
+          ######################
+
+          # get script in this order
+          # 1 - model_line script
+          # 2 - model script
+          # 3 - get the default calculation script
+
+          # get the model line script
+          script_name = model_line.getCalculationScriptId()
+          if script_name is None:
+            # if model line script is None, get the default model script
+            script_name = model.getDefaultCalculationScriptId()
+
+          if script_name is None:
+            # if no calculation script found, use a default script :
+            script_name = 'PaySheetTransaction_defaultCalculationScript'
+
+          if getattr(self, script_name, None) is None:
+            raise ValueError, "Unable to find `%s` calculation script" % \
+                                                             script_name
+          calculation_script = getattr(self, script_name, None)
+          quantity=0
+          price=0
+          LOG('script_name :', 0, script_name)
+          result = calculation_script(\
+            base_amount_current_value_dict=base_amount_current_value_dict,
+            share=share,
+            model_slice_min=model_slice_min, 
+            model_slice_max=model_slice_max, 
+            cell=cell,)
+
+          quantity = result['quantity']
+          price = result['price']
+
+          # Cell creation :
+          # Define an empty new cell
+          new_cell = { 'axe_list' : [share, slice],
+                       'quantity' : quantity,
+                       'price'    : price,
+                     }
+          cell_list.append(new_cell)
+
+          #XXX this is a hack to have the net salary
+          base_list = model_line.getResourceValue().getBaseAmountList()
+          if price is not None and 'employee_share' in share and\
+              ('deductible_tax' in base_list or\
+               'non_deductible_tax' in base_list):
+            employee_tax_amount += round((price * quantity), precision)
+
+          # update base participation
+          base_participation_list = service.getBaseAmountList(base=1)
+          for base_participation in base_participation_list:
+            if quantity:
+              if base_amount_current_value_dict.has_key(base_participation):
+                old_val = base_amount_current_value_dict[base_participation]
+              else:
+                old_val = 0
+              new_val = old_val + quantity
+
+              if price:
+                if old_val != 0:
+                  new_val = round((old_val + quantity*price), precision) 
+              base_amount_current_value_dict[base_participation] = new_val
 
       if cell_list:
         # create the PaySheetLine