473,803 Members | 4,458 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Inheritence Problem

Hello. I'm trying to mod an open source app called TinyERP and inherit
from a parent object, and in essence change how _column is defined. I
found sample code of:

class custom_product( osv.osv):
__inherits__ = "product.produc t"
__name__ = "product.produc t"
_columns = {
'color' : fields.many2one ('color','Color '),
'size': fields.many2one ('size','Size') ,
}
custom_product( )

This doesn't work. It does seem to override it, however, it seems to
replace the function. How can I essentially redefine the _columns var?

Thanks, Graeme

The main class looks like this:
from osv import fields
from osv import osv
from osv import orm
#----------------------------------------------------------
# UOM
#----------------------------------------------------------

class product_uom_cat eg(osv.osv):
_name = 'product.uom.ca teg'
_description = 'Product uom categ'
_columns = {
'name': fields.char('Na me', size=64, required=True),
}
product_uom_cat eg()

class product_uom(osv .osv):
_name = 'product.uom'
_description = 'Product Unit of Measure'
_columns = {
'name': fields.char('Na me', size=64, required=True),
'category_id': fields.many2one ('product.uom.c ateg', 'UOM Category',
required=True, ondelete='casca de'),
'factor': fields.float('F actor', required=True),
'rounding': fields.integer( 'Rounding Precision', required=True),
'active': fields.boolean( 'Active')
}
_defaults = {
'factor': lambda x,y,z: 1.0,
'active': lambda x,y,z: 1,
'rounding': lambda x,y,z: 2,
}
def _compute_qty(se lf, cr, uid, uom_id, qty):
if not uom_id or not qty:
return qty
f = self.read(cr, uid, [uom_id], ['factor','round ing'])[0]
return int(qty / f['factor'])

def _compute_price( self, cr, uid, uom_id, qty):
if not uom_id or not qty:
return qty
f = self.read(cr, uid, [uom_id], ['factor','round ing'])[0]
return round(qty * f['factor'], f['rounding'])

product_uom()

#----------------------------------------------------------
# Categories
#----------------------------------------------------------
class product_categor y(osv.osv):
_name = "product.catego ry"
_description = "Product Category"
_columns = {
'name': fields.char('Na me', size=64, required=True),
'parent_id': fields.many2one ('product.categ ory','Parent Category'),
'child_id': fields.one2many ('product.categ ory', 'parent_id',
string='Childs Categories')
}
def child_get(self, cr, uid, ids):
return [ids]
product_categor y()

#----------------------------------------------------------
# Products
#----------------------------------------------------------
class product_templat e(osv.osv):

_name = "product.templa te"
_description = "Product Template"
_columns = {
'name': fields.char('Na me', size=64, required=True, translate=True) ,
'description': fields.text('De scription', translate=True) ,
'description_pu rchase': fields.text('Pu rchase Description',
translate=True) ,
'description_sa le': fields.text('Sa le Description', translate=True) ,
'name_ids': fields.one2many ('product.templ ate.name', 'template_id',
'Names for Partners'),
'type': fields.selectio n([('product','Sto ckable
Product'),('ser vice','Service' )], 'Product Type', required=True),
'supply_method' :
fields.selectio n([('produce','Pro duce'),('buy',' Buy')], 'Supply
method', required=True),
'seller_id': fields.many2one ('res.partner', 'Default Supplier'),
'seller_delay': fields.float('S upplier lead time'),
'sale_delay': fields.float('P rocurement lead time'),
'seller_ids': fields.many2man y('res.partner' ,
'product_produc t_supplier', 'product_id','p artner_id','Alt ernative
Suppliers'),
'manufacturer' : fields.char('Ma nufacturer', size=64),
'manufacturer_p name' : fields.char('Ma nufacturer product name',
size=64),
'manufacturer_p ref' : fields.char('Ma nufacturer product code',
size=64),
'procure_method ': fields.selectio n([('make_to_stock ','Make to
Stock'),('make_ to_order','Make to Order')], 'Procure Method',
required=True),
'rental': fields.boolean( 'Rentable product'),
'categ_id': fields.many2one ('product.categ ory','Category' ,
required=True),
'list_price': fields.float('L ist Price'),
'volume': fields.float('V olume'),
'weight': fields.float('W eight'),
'cost_method': fields.selectio n([('standard','St andard Price'),
('pmp','PMP (Not implemented!)')], 'Costing Method', required=True),
'standard_price ': fields.float('S tandard Price', required=True),
'limit_price': fields.float('L imit Price'),
'warranty': fields.float('W arranty (months)'),
'sale_ok': fields.boolean( 'Can be sold'),
'purchase_ok': fields.boolean( 'Can be Purchased'),
'taxes_id': fields.many2man y('account.tax' , 'product_taxes_ rel',
'prod_id', 'tax_id', 'Product Taxes'),
'uom_id': fields.many2one ('product.uom', 'Default UOM',
required=True),
'uom_po_id': fields.many2one ('product.uom', 'Purchase UOM',
required=True),
'state': fields.selectio n([('draft', 'In
Development'),( 'sellable','Sel lable'),('end', 'End of
lifecycle'),('o bsolete','Obsol ete')], 'State'),
}
_defaults = {
'type': lambda x,y,z: 'product',
'list_price': lambda x,y,z: 1,
'cost_method': lambda x,y,z: 'standard',
'supply_method' : lambda x,y,z: 'buy',
'standard_price ': lambda x,y,z: 1,
'limit_price': lambda x,y,z: 1,
'sale_ok': lambda x,y,z: 1,
'sale_delay': lambda x,y,z: 7,
'purchase_ok': lambda x,y,z: 1,
'procure_method ': lambda x,y,z: 'make_to_stock' ,
'specific_bom': lambda x,y,z: False,
'specific_routi ng': lambda x,y,z: False,
}
# TODO: redefine name_get & name_search for product.templat e.name
def name_get(self, cr, user, ids, context={}):
if 'partner_id' in context:
pass
return orm.orm.name_ge t(self, cr, user, ids, context)

product_templat e()

class product_templat e_name(osv.osv) :
_name = "product.templa te.name"
_description = "Product Template"
_columns = {
'name': fields.char('Pr oduct Name', size=64, required=True),
'code': fields.char('Pr oduct Code', size=32),
'partner_id': fields.many2one ('res.partner', 'Partner',
ondelete='casca de'),
'template_id': fields.many2one ('product.templ ate', 'Product
Template', ondelete='casca de'),
}
product_templat e_name()

class product_product (osv.osv):
def _product_price( self, cr, uid, ids, name, arg, context={}):
res = {}
quantity = context.get('qu antity', 1)
pricelist = context.get('pr icelist', False)
if pricelist:
for id in ids:
price =
self.pool.get(' product.priceli st').price_get( cr,uid,[pricelist], id,
quantity, 'list')[pricelist]
res[id] = price
for id in ids:
res.setdefault( id, 0.0)
if 'uom' in context:
for id in ids:
res[id] = self.pool.get(' product.uom')._ compute_price(c r, uid,
context['uom'], res[id])
return res

def _product_virtua l_available(sel f, cr, uid, ids, name, arg,
context={}):
res = {}
if ('shop' in context) and context['shop']:
cr.execute('sel ect warehouse_id from sale_shop where id=%d',
(int(context['shop']),))
res = cr.fetchone()
if res:
context['warehouse'] = res[0]
if context.get('wa rehouse',False) :
cr.execute('sel ect lot_stock_id from stock_warehouse where id=%d',
(int(context['warehouse']),))
res = cr.fetchone()
context['location'] = res[0]
if context.get('lo cation',False):
res = self.pool.get(' stock.location' )._product_virt ual_get(cr, uid,
context['location'], ids)
for id in ids:
res.setdefault( id, 0)
if 'uom' in context:
for id in ids:
res[id] = self.pool.get(' product.uom')._ compute_qty(cr, uid,
context['uom'], res[id])
return res

def _product_qty_av ailable(self, cr, uid, ids, name, arg, context={}):
res = {}
if 'shop' in context:
cr.execute('sel ect warehouse_id from sale_shop where id=%d',
(int(context['shop']),))
res = cr.fetchone() or {}
if res:
context['warehouse'] = res[0]
if context.get('wa rehouse',False) :
cr.execute('sel ect lot_stock_id from stock_warehouse where id=%d',
(int(context['warehouse']),))
res = cr.fetchone() or {}
if res:
context['location'] = res[0]

if context.get('lo cation',False):
res = self.pool.get(' stock.location' )._product_get( cr, uid,
context['location'], ids) or {}
for id in ids:
res.setdefault( id, 0)
if 'uom' in context:
for id in ids:
res[id] = self.pool.get(' product.uom')._ compute_qty(cr, uid,
context['uom'], res[id])
return res

def _product_lst_pr ice(self, cr, uid, ids, name, arg, context={}):
res = {}
for p in self.browse(cr, uid, ids):
res[p.id] = p.list_price
for id in ids:
res.setdefault( id, 0)
if 'uom' in context:
for id in ids:
res[id] = self.pool.get(' product.uom')._ compute_price(c r, uid,
context['uom'], res[id])
return res

def _get_partner_co de_name(self, cr, uid, ids, product_id,
partner_id):
product = self.browse(cr, uid, [product_id])[0]
for name in product.name_id s:
if name.partner_id .id == partner_id:
return {'code' : name.code, 'name' : name.name}
return {'code' : product.default _code, 'name' : product.name}

def _product_code(s elf, cr, uid, ids, name, arg, context={}):
res = {}
for p in self.browse(cr, uid, ids):
res[p.id] = self._get_partn er_code_name(cr , uid, [], p.id,
context.get('pa rtner_id', None))['code']
return res

def _product_partne r_ref(self, cr, uid, ids, name, arg, context={}):
res = {}
for p in self.browse(cr, uid, ids):
res[p.id] = self._get_partn er_code_name(cr , uid, [], p.id,
context.get('pa rtner_id', None))['name']
return res

_defaults = {
'active': lambda x,y,z: 1
}
_name = "product.produc t"
_description = "Product"
_table = "product_produc t"
_inherits = {'product.templ ate': 'product_tmpl_i d'}
_columns = {
'qty_available' : fields.function (_product_qty_a vailable, method=True,
type='integer', string='Real Stock'),
'virtual_availa ble': fields.function (_product_virtu al_available,
method=True, type='integer', string='Virtual Stock'),
'price': fields.function (_product_price , method=True, type='float',
string='Custome r Price'),
'lst_price' : fields.function (_product_lst_p rice, method=True,
type='float', string='List price'),
'code': fields.function (_product_code, method=True, type='char',
string='Code'),
'partner_ref' : fields.function (_product_partn er_ref, method=True,
type='char', string='Custome r ref'),
'default_code' : fields.char('Co de', size=64),
'active': fields.boolean( 'Active'),
'variants': fields.char('Va riants', size=64),
'list_price_mar gin': fields.float('L ist Price Margin'),
'list_price_ext ra': fields.float('L ist Price Extra'),
'standard_price _margin': fields.float('S tandard Price Margin'),
'standard_price _extra': fields.float('S tandard Price Extra'),
'limit_price_ma rgin': fields.float('L imit Price Margin'),
'limit_price_ex tra': fields.float('L imit Price Extra'),
'product_tmpl_i d': fields.many2one ('product.templ ate', 'Product
Template', required=True),
}

def on_order(self, cr, uid, ids, orderline, quantity):
pass

def name_get(self, cr, user, ids, context={}):
if not len(ids):
return []
def _name_get(d):
name = self._product_p artner_ref(cr, user, [d['id']], '', '',
context)[d['id']]
code = self._product_c ode(cr, user, [d['id']], '', '',
context)[d['id']]
if code:
name = '[%s] %s' % (code,name)
if d['variants']:
name = name + ' - %s' % (d['variants'],)
return (d['id'], name)
result = map(_name_get, self.read(cr, user, ids, ['variants']))
return result

def name_search(sel f, cr, user, name, args=[], operator='ilike ',
context={}):
ids = self.search(cr, user, [('name',operato r,name)]+ args)
ids += self.search(cr, user, [('default_code' ,'=',name)]+ args)
return self.name_get(c r, user, ids)

def price_get(self, cr, uid, ids, ptype='list'):
result = self.read(cr, uid, ids)
result2 = {}
for res in result:
result2[res['id']] =
(res[ptype+'_price']*(1.0+(res[ptype+'_price_m argin'] or
0.0)))+(res[ptype+'_price_e xtra'] or 0.0)
return result2
product_product ()

def rounding(f, r):
if not r:
return f
return round(f / r) * r

#----------------------------------------------------------
# Price lists
#----------------------------------------------------------

class product_priceli st(osv.osv):
_name = "product.pricel ist"
_description = "Pricelist"
_columns = {
'name': fields.char('Na me',size=64, required=True),
'active': fields.boolean( 'Active'),
'version_id': fields.one2many ('product.price list.version',
'pricelist_id', 'Pricelist Versions')
}
_defaults = {
'active': lambda x,y,z: 1,
}

def price_get(self, cr, uid, ids, prod_id, qty, type='list'):
result = {}

# TODO FIXME
for id in ids:
cr.execute('sel ect * from product_priceli st_version where
pricelist_id=%d and active=True order by id limit 1', (id,))
plversion = cr.dictfetchone ()
if not plversion:
raise 'pricelist', 'No active version for this pricelist !\nPlease
create or active one.'

cr.execute('sel ect id,categ_id from product_templat e where
id=(select product_tmpl_id from product_product where id=%d)',
(prod_id,))
tmpl_id,categ = cr.fetchone()
categ_ids = []
while categ:
categ_ids.appen d(str(categ))
cr.execute('sel ect parent_id from product_categor y where id=%d',
(categ,))
categ = cr.fetchone()[0]
if categ_ids:
categ_where = '(categ_id in ('+','.join(cat eg_ids)+'))'
else:
categ_where = '(categ_id is null)'

cr.execute('sel ect * from product_priceli st_item where
(product_tmpl_i d is null or product_tmpl_id =%d) and '+categ_where+' and
price_version_i d=%d and (min_quantity is null or min_quantity<=% d)
order by priority limit 1', (tmpl_id, plversion['id'], qty))
res = cr.dictfetchone ()
if res:

if res['base_pricelist _id'] and res['base']=='pricelist':
price = self.price_get( cr, uid, [res['base_pricelist _id']],
prod_id, qty, type)[res['base_pricelist _id']]
price_limit = self.price_get( cr, uid, [res['base_pricelist _id']],
prod_id, qty, 'limit')[res['base_pricelist _id']]
else:
price = self.pool.get(' product.product ').price_get(cr , uid,
[prod_id], type)[prod_id]
price_limit = self.pool.get(' product.product ').price_get(cr , uid,
[prod_id], 'limit')[prod_id]

price = price * (1.0-(res[type+'_price_di scount'] or 0.0))
price=rounding( price, res[type+'_price_ro und'])
price += (res[type+'_price_su rcharge'] or 0.0)
if res[type+'_price_mi n_margin']:
price = max(price, price_limit+res[type+'_price_mi n_margin'])
if res[type+'_price_ma x_margin']:
price = min(price, price_limit+res[type+'_price_ma x_margin'])
else:
price=False
result[id] = price

return result
product_priceli st()

class product_priceli st_version(osv. osv):
_name = "product.pricel ist.version"
_description = "Pricelist Version"
_columns = {
'pricelist_id': fields.many2one ('product.price list', 'Price List',
required=True),
'name': fields.char('Na me', size=64, required=True),
'active': fields.boolean( 'Active'),
'items_id': fields.one2many ('product.price list.item',
'price_version_ id', 'Price List Items', required=True),
'date_start': fields.date('St art Date'),
'date_end': fields.date('En d Date')
}
_defaults = {
'active': lambda x,y,z: 1,
}
product_priceli st_version()

class product_priceli st_item(osv.osv ):
_name = "product.pricel ist.item"
_description = "Pricelist item"
_order = "priority"
_defaults = {
'list_price_bas e': lambda x,y,z: 'list',
'standard_price _base': lambda x,y,z: 'standard',
'limit_price_ba se': lambda x,y,z: 'limit',
'min_quantity': lambda x,y,z: 1,
'priority': lambda x,y,z: 5,
}
_columns = {
'name': fields.char('Na me', size=64, required=True),
'price_version_ id': fields.many2one ('product.price list.version',
'Price List Version', required=True),
'product_tmpl_i d': fields.many2one ('product.templ ate', 'Product
Template'),
'categ_id': fields.many2one ('product.categ ory', 'Product Category'),

'min_quantity': fields.integer( 'Min. Quantity', required=True),
'priority': fields.integer( 'Priority', required=True),
'base':
fields.selectio n((('product',' Product'),('pri celist','Pricel ist')),
'Based on', required=True),
'base_pricelist _id': fields.many2one ('product.price list', 'Base Price
List'),

'list_price_bas e':
fields.selectio n((('list','Lis t'),('standard' ,'Standard'),(' limit','Limit') ),'List
Price Base', required=True),
'list_price_sur charge': fields.float('L ist Price Surcharge'),
'list_price_dis count': fields.float('L ist Price Discount'),
'list_price_rou nd': fields.float('L ist Price Rounding'),
'list_price_min _margin': fields.float('L ist Price Min. Margin'),
'list_price_max _margin': fields.float('L ist Price Max. Margin'),

'standard_price _base':
fields.selectio n((('list','Lis t'),('standard' ,'Standard'),(' limit','Limit') ),'Standard
Price Base', required=True),
'standard_price _surcharge': fields.float('S tandard Price Surcharge'),
'standard_price _discount': fields.float('S tandard Price Discount'),
'standard_price _round': fields.float('S tandard Price Rounding'),
'standard_price _min_margin': fields.float('S tandard Price Min.
Margin'),
'standard_price _max_margin': fields.float('S tandard Price Max.
Margin'),

'limit_price_ba se':
fields.selectio n((('list','Lis t'),('standard' ,'Standard'),(' limit','Limit') ),'Limit
Price Base', required=True),
'limit_price_su rcharge': fields.float('L imit Price Surcharge'),
'limit_price_di scount': fields.float('L imit Price Discount'),
'limit_price_ro und': fields.float('L imit Price Rounding'),
'limit_price_mi n_margin': fields.float('L imit Price Min. Margin'),
'limit_price_ma x_margin': fields.float('L imit Price Max. Margin'),
}
product_priceli st_item()

Nov 22 '05 #1
1 1720
gr***********@g mail.com wrote:
Hello. I'm trying to mod an open source app called TinyERP and inherit
from a parent object, and in essence change how _column is defined. I
found sample code of:
Looks like "Spot the differences" puzzle to me. Hint: look at the
underscore characters.

class custom_product( osv.osv):
__inherits__ = "product.produc t"
__name__ = "product.produc t"
_columns = {
'color' : fields.many2one ('color','Color '),
'size': fields.many2one ('size','Size') ,
}
custom_product( )

....
class product_uom_cat eg(osv.osv):
_name = 'product.uom.ca teg'
_description = 'Product uom categ'
_columns = {
'name': fields.char('Na me', size=64, required=True),
}
product_uom_cat eg()


Nov 22 '05 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
4144
by: John | last post by:
Hi, I am trying to create a class heirarchy similar to the following: // base interface class ICar { public: virtual void start() = 0; }; // add members to that interface, but retain base capabilities
8
4228
by: Digital Puer | last post by:
I made the following table to help me (re)learn inheritence basics. Can someone check if it's correct? This table requires a courier-like font. Java C++ ---- --- subclass' methods can yes, default must use "virtual" in front override base class' of base class' method
5
2430
by: john bailo | last post by:
For a c# web application, I created a user control that includes a form in control. The idea is, on the main Page, when the user clicks Submit from the master form, that makes the user control visible and gives it new functionality, but retains the look of the top half of the master page. I then hide the original submit button. Ok, now, after pressing the Submit button in the user control, I want to change the look of the master page.
0
1378
by: Jan Elbæk | last post by:
Hi, I would like to make a base form in my project - which (almost) all forms must inherit from. The baseform must have some visible elements (a toolbar, a topaligned panel and a picturebox and perhaps some more). Also. I need it to have a specielized constructor in the base. And the baseform must implement some methods (like Setstatusbartext) - and som default eventhandlers (like Closing), which must be virtual so that additional code can...
16
3100
by: gorda | last post by:
Hello, I am playing around with operator overloading and inheritence, specifically overloading the + operator in the base class and its derived class. The structure is simple: the base class has two int memebers "dataA", "dataB". The derived class has an additional int member "dataC". I am simply trying to overload the + operator so that 'adding' two objects will sum up the corresponding int members.
7
1985
by: preetam | last post by:
Hi, This question is more towards design than towards c++ details. By looking at books on design patterns and various google threads on the same topic, I see that composition is favoured to inheritence. One more article I read was Allen holub's "Why extends is evil". http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html One general advice I found was that - extending behaviour is better done with interfaces and...
11
1646
by: Vincent van Beveren | last post by:
Hi everyone, I have the following code using inheritence The important part is the function getName(). The result should alert 'John Doe': function First(name) { this.name = name; this.getName = function() { return this.name;
7
1601
by: vj | last post by:
Hello Group, I am C++/OOP newbie and was working on a project when i came accross this puzzleing problem with inheritence. C++ Code ================== class Parent {
5
2127
by: Neelesh Bodas | last post by:
This might be slightly off-topic. Many books on C++ consider multiple inheritence as an "advanced" concept. Bruce Eckel says in TICPP, volume 2 that "there was (and still is) a lot of disagreement about whether is essential in C++". Are there any disadvantages of using multiple inheritence?
4
1422
by: arnaudk | last post by:
I have two unrelated types of data elements (objects) which I want to hold in two related types of containers, one for each element type. But this seems contradictory - for consistency, it seems that either the containers should be unrelated through inheritance, or the elements should be related through inheritance. The problem with (a) is that I'd like to specify a base class interface for the containers which necessarily relates them...
0
9703
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
10548
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10316
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10295
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10069
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7604
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6842
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
1
4275
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3798
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.