from django.contrib import admin from django.utils.translation import ugettext_lazy as _ from common import generic from basedata.models import Material from invent.models import StockIn,StockOut,InitialInventory,InItem,OutItem,InitItem,Inventory,InItemForm,InOutDetail,\ WareReturn,ReturnItem,WareAdjust,AdjustItem class InItemInline(admin.TabularInline): model = InItem form = InItemForm fields = ('material', 'measure', 'cnt', 'price') raw_id_fields = ['material'] def get_extra(self, request, obj=None, **kwargs): if obj: return 0 else: return 1 def get_readonly_fields(self, request, obj=None): if obj and obj.status == 1: return ['material', 'measure', 'cnt', 'price'] else: return [] def formfield_for_foreignkey(self, db_field, request=None, **kwargs): if db_field.name == 'material': kwargs['queryset'] = Material.objects.filter(is_virtual=0) return super(InItemInline,self).formfield_for_foreignkey(db_field,request,**kwargs) class OutItemInline(admin.TabularInline): model = OutItem fields = ('inventory', 'measure', 'cnt', 'price','warehouse',) raw_id_fields = ['inventory'] readonly_fields = ['measure', 'price', 'warehouse'] def get_extra(self, request, obj=None, **kwargs): if obj: return 0 else: return 3 class InitItemInline(admin.TabularInline): model = InitItem fields = ('material', 'measure', 'cnt', 'warehouse', 'price',) raw_id_fields = ['material'] def get_readonly_fields(self, request, obj=None): if obj and obj.execute_time: return ['material', 'measure', 'cnt', 'warehouse', 'price'] else: return [] def get_extra(self, request, obj=None, **kwargs): if obj: return 0 else: return 3 def formfield_for_foreignkey(self, db_field, request=None, **kwargs): if db_field.name == 'material': kwargs['queryset'] = Material.objects.filter(is_virtual=0) return super(InitItemInline,self).formfield_for_foreignkey(db_field,request,**kwargs) class StockInAdmin(generic.BOAdmin): CODE_PREFIX = 'RK' CODE_NUMBER_WIDTH = 5 list_display = ['code','title','money_of_amount','status','entry_time'] inlines = [InItemInline] raw_id_fields = ['po'] fields = ( ('code',),('title',),('po',),('warehouse',),('batch',),('status','amount',) ) date_hierarchy = 'begin' extra_buttons = [{'href':'cin','title':_('Action Stock In')}] def save_model(self, request, obj, form, change): import decimal super(StockInAdmin,self).save_model(request,obj,form,change) if obj and obj.po: po_items = obj.po.poitem_set.filter(left_cnt__gt=0).all() for item in po_items: try: InItem.objects.get(po_item=item,master=obj) continue except Exception,e: pp = item.discount_price or item.price if decimal.Decimal(item.tax) > decimal.Decimal(0): pp = pp /(decimal.Decimal(1)+decimal.Decimal(item.tax)) InItem.objects.create(warehouse=obj.warehouse,material=item.material,measure=item.measure,prop='+', po_item=item,master=obj,cnt=item.left_cnt,price=pp,batch=obj.batch,source=obj.code) def get_readonly_fields(self, request, obj=None): print obj if obj and obj.status == 9: return ['code','title','po','warehouse','batch','status'] else: return ['status','amount'] def changeform_view(self, request, object_id=None, form_url='', extra_context=None): extra_context = extra_context or {} if object_id: obj = StockIn.objects.get(id=object_id) if obj and obj.execute_time: extra_context.update(dict(readonly=True)) return super(StockInAdmin,self).changeform_view(request,object_id,form_url,extra_context) class StockOutAdmin(generic.BOAdmin): CODE_PREFIX = 'CK' CODE_NUMBER_WIDTH = 5 list_display = ['code','title','project','status','out_time','out_amount'] list_display_links = ['code','title'] date_hierarchy = 'begin' inlines = [OutItemInline] raw_id_fields = ['project','wo','user'] fields = ( ('code', 'status',),('project', ),('wo','user'), ('title','amount',),('description',), ) readonly_fields = ['status'] extra_buttons = [{'href':'out','title':_('Action Stock Out')}] search_fields = ['code','title','user__username'] def changeform_view(self, request, object_id=None, form_url='', extra_context=None): extra_context = extra_context or {} if object_id: obj = StockOut.objects.get(id=object_id) if obj and obj.execute_time: extra_context.update(dict(readonly=True)) return super(StockOutAdmin,self).changeform_view(request,object_id,form_url,extra_context) def save_model(self, request, obj, form, change): if obj and obj.user is None: obj.user = request.user super(StockOutAdmin,self).save_model(request,obj,form,change) class InitialInventoryAdmin(generic.BOAdmin): CODE_PREFIX = 'QC' CODE_NUMBER_WIDTH = 3 list_display = ['code','title','status'] inlines = [InitItemInline] fields = ('code','title','org','status','amount','attach') readonly_fields = ['status','amount'] extra_buttons = [{'href':'cin','title':_('Action Stock In')}] def changeform_view(self, request, object_id=None, form_url='', extra_context=None): extra_context = extra_context or {} if object_id: obj = InitialInventory.objects.get(id=object_id) if obj and obj.execute_time: extra_context.update(dict(readonly=True)) return super(InitialInventoryAdmin,self).changeform_view(request,object_id,form_url,extra_context) class InventoryAdmin(generic.BOAdmin): list_display = ['material','measure','warehouse','cnt','price'] search_fields = ['material__name','material__code'] def changeform_view(self, request, object_id=None, form_url='', extra_context=None): extra_context = extra_context or {} extra_context.update(dict(readonly=True)) if object_id: inventory = Inventory.objects.get(id=object_id) material = inventory.material warehouse = inventory.warehouse detail = InOutDetail.objects.filter(material=material,warehouse=warehouse) extra_context.update(dict(detail=detail)) return super(InventoryAdmin,self).changeform_view(request,object_id,form_url,extra_context) class ReturnItemInline(admin.TabularInline): model = ReturnItem fields = ['material','measure','warehouse','out_cnt','cnt'] readonly_fields = ['material','measure','warehouse','out_cnt'] extra = 0 class WareReturnAdmin(generic.BOAdmin): """ """ CODE_PREFIX = 'FK' CODE_NUMBER_WIDTH = 4 list_display = ['code','title','out'] fields = ( ('code',),('title',),('out',),('amount',),('status',) ) readonly_fields = ['status'] raw_id_fields = ['out'] inlines = [ReturnItemInline] extra_buttons = [{'href':'cin','title':_('Action Ware Return')}] def changeform_view(self, request, object_id=None, form_url='', extra_context=None): if object_id : obj = WareReturn.objects.get(id=object_id) if obj.status == '9': extra_context = extra_context or {} extra_context.update(dict(readonly=True)) return super(WareReturnAdmin,self).changeform_view(request,object_id,form_url,extra_context) class AdjustItemInline(admin.TabularInline): model = AdjustItem fields = ['inventory','measure','warehouse','prop','cnt'] readonly_fields = ['measure','warehouse'] raw_id_fields = ['inventory'] def get_extra(self, request, obj=None, **kwargs): if obj: return 0 else: return 1 class WareAdjustAdmin(generic.BOAdmin): CODE_PREFIX = 'TZ' CODE_NUMBER_WIDTH = 3 list_display = ['code','title','status'] fields = ( ('code',),('title',),('description',),('status',) ) readonly_fields = ['status'] inlines = [AdjustItemInline] extra_buttons = [{'href':'adjust','title':_('Action Ware Adjust')}] date_hierarchy = 'begin' def changeform_view(self, request, object_id=None, form_url='', extra_context=None): if object_id: obj = WareAdjust.objects.get(id=object_id) if obj and obj.status == '9': extra_context = extra_context or {} extra_context.update(dict(readonly=True)) return super(WareAdjustAdmin,self).changeform_view(request,object_id,form_url,extra_context) admin.site.register(StockIn,StockInAdmin) admin.site.register(StockOut,StockOutAdmin) admin.site.register(InitialInventory,InitialInventoryAdmin) admin.site.register(Inventory,InventoryAdmin) admin.site.register(WareReturn,WareReturnAdmin) admin.site.register(WareAdjust,WareAdjustAdmin)